在理解ARM的load-store架构时,我在百度上搜索了很长时间,但是始终找不到一篇像样的中文文章。最后,在用谷歌搜索的英文网站上终于找到了一些蛛丝马迹。让我们先看一下一篇英文资料。

Processor design is strongly tied to the instruction set design.  There were many diverse computer designs and hence many different instruction set designs in the past.  However, as the technology progress, the analysis of the work load, the actual running programs, which affect the instruction set selection, lead to the converge of instruction set.  The most common type of instruction set architecture today belong to three classes :

  • Load-Store architecture
  • Register-Memory architecture
  • Register-plus-Memory architecture

Load-Store architecture has 3-address format and mostly 32 bit instruction size.  This is the most popular among the current microprocessor design, including : HP PA-RISC, IBM RS/6000, SUN Sparc, MIPS R4000, DEC Alpha etc.  All data to/from memory must load/store through a register first.  The execution (operation) takes operands from registers and the result stored back to a register.  This instruction format simplifies the decoding and implementation.

Register-Memory architecture has 2-address format and has 16/32/64 bit instruction size.  An instruction can operate both on registers and with one of the operand in the memory.  This is the 'classical' ISA and is used by one of the longest lived ISA of today IBM S/360 and Intel x86 family of processors.

Register-plus-Memory architecture is the most flexible in the use of operands.  Operands and be register or memory and has byte-variable instruction size.  This flexibility comes with a prize, the complexity in implementation.  This type of architecture is typified by VAX family of computer in the era that there was the drive to provide the high level language semantic for the instruction set, so called 'close the gap' between high level language and machine language.

翻译成中文的意思大概是这样的。

Load-Store architecture CPU只允许用load/store指令来与memory(Flash、RAM)交互,而CPU的运算全部都是在寄存器中完成。也就是说,CPU运算的操作数只能全部来自寄存器,而且结构也只能保存在寄存器中。所以,倘若要把RAM两个数据相加,结果还保存到内存中,就需要先将内存中的数据通过load指令将内存数据加载到寄存器中,计算结束后,再将保存结果寄存器的内容通过store指令存储在RAM中。举一个ARM指令的例子如下。

ADD R0,R1,R2

Register-Memory architecture   CPU的运算操作数可以全部都是寄存器,也允许其中的一个操作数在memory中。所以,CPU可以通过其他指令来与memeory交互,这种架构的指令集相对复杂。举一个X86指令的例子如下。

add mem,reg

Register-plus-Memory architecture CPU的运算操作数可以全部都是寄存器,也可以全部都是memory,还可以两者都有。而且,寄存器、memory的size是可变的,可以是单字节、两个字节、四个字节。所以,CPU和memeory的交互比"Register-Memory architecture"更灵活。这种架构的指令集非常复杂,在译码过程中效率很低。举一个VAX指令的例子如下。

XORL3  (R3)+,(R4)+,(R5)+

附上一个各种ISA(Instruction Set Architecture)的结构图:

参考网站:http://en.wikipedia.org/wiki/Load/store_architectureLoad-Store architecture

http://en.wikipedia.org/wiki/Register_memory_architecture(Register-Memory architecture )

http://www.cp.eng.chula.ac.th/~piak/teaching/ca/arch-description.htm   (Instruction Set Architecture  )

load-store/register-memory/register-plus-memory比较的更多相关文章

  1. Load store action in vulkan & ogles 的解决方案

    metal的带宽之前的blog有讲 这篇主要是vulkan 和ogles的解决方案 https://www.khronos.org/registry/vulkan/specs/1.1-extensio ...

  2. Unordered load/store queue

    A method and processor for providing full load/store queue functionality to an unordered load/store  ...

  3. Load store and memoryless

    metal https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPractice ...

  4. MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size

    http://dev.mysql.com/doc/refman/5.7/en/create-table.html You can use the TEMPORARY keyword when crea ...

  5. Arcgis map export or print Error: Cannot map metafile into memory. Not enough memory

      Arcgis map export or print Error: Cannot map metafile into memory. Not enough memory Link: https:/ ...

  6. Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

    --reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...

  7. 批量Load/Store指令的寻址方式

    批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据.也称为多寄存器寻址方式,即一条指令可以完成多个寄存器值的传送.这种寻址方式可以用一条指令最多完成传送16个通用寄存器的 ...

  8. Diagnosing out of memory errors and memory leaks 内存泄露实例 C Java JavaScript 内存泄露

    小结: 1. 数据库连接池. JDBC语句和结果对象必须显式地关闭. 2. 电梯到目标楼层后地址是否被释放 When a button is pressed: Get some memory, whi ...

  9. #define barrier() __asm__ __volatile__("": : :"memory") 中的memory是gcc的东西

    gcc内嵌汇编简介 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作 ...

  10. 每个内存大小:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Size:"

    CPU: 型号:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 数量:lscpu |grep "CPU ...

随机推荐

  1. preference activity框架

    从android3.0开始preference框架做了重大改变 框架由一下四部分组成 1.preference screen布局 一个xml文件,指定了要显示的Preference控件. 每个控件应当 ...

  2. JS问题Uncaught ReferenceError:XXXX is not defined

    背景: html中一个table,table中进行分页.每行后面有一系列操作,如删除,修改.现在以删除为例说明问题. 实现方式: 使用button,在onclick中调用js函数,js函数中传递参数如 ...

  3. 【转】MyEclipse第一个Servlet程序

    转自:http://blog.csdn.net/wangdingqiaoit/article/details/7674367 前言 本文旨在帮助学习java web开发的人员,熟悉环境,在Win7系统 ...

  4. haproxy部署及配置

    HAProxy介绍 (1)HAProxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特 ...

  5. JUnit4注解基本介绍

    @After If you allocate external resources in a Before method you need to release them after the test ...

  6. 【Python】分布式任务队列Celery使用参考资料

    Python-Celery Homepage | Celery: Distributed Task Queue User Guide - Celery 4.0.2 documentation Task ...

  7. java基础语法笔记

    这段时间看了一些java,急了一些笔记,记下一遍以后复习用! 2016-07-24 15:12:40 java很多语法都跟C#类似,下面列举一些不同的地方******注意***** java中的系统方 ...

  8. Magento 使用心得

    Modules->模块 Controller->控制器 Model->模型 Magento是这个星球上最强大的购物车网店平台.当然,你应该已经对此毫无疑问了.不过,你可能还不知道,M ...

  9. group by java实现

    public static void abc(List list,String... sortName) throws Exception{ Map<String,List<Object& ...

  10. 那天有个小孩跟我说LINQ(七)转载

    1  LINQ TO XML(代码下载)        准备:新建项目 linq_Ch7控制台程序,新建一个XML文件夹,我们就轻松地学习一下吧          XDocument         ...