ARM体系架构—ARMv7-A指令集
一、ARMv7-A指令集
ARMv7-A架构是32位处理器架构。也是load/store架构,即数据处理指令操作在通用寄存器完成,只有load/store指令可以访问内存。此外ARM指令集还有一大特点,就是ARM指令集几乎所有的指令都可以增加条件码。
ARM指令集可以归为一下四类:
- 数据处理操作(ALU操作例如ADD);
- 内存操作(load/store);
- 控制流(循环,跳转,条件码等);
- 系统(协处理器,debug,模式切换等等)。
本文重点介绍数据处理指令。
二、ARMv7-A条件码
ARM指令集的一个特性是几乎所有的指令都可以增加条件码(绝大多数其他处理器架构中,只有跳转指令可以加条件码),以利用CPSR(Current Program Status Register)寄存器中的状态位。在简单的if/then/else结构中,这一特性对于避免条件分支或复合比较非常有用。
举例说明条件码的好处(两个值找到较小的):
if (a < b)
n = a;
else
n = b;
无条件码汇编:
有条件码汇编:
MOV是算术运算指令,功能是将第二操作数传送到目标寄存器。
其后增加了条件码GE和LT,GE(greater than or equal)表示CMP比较结果是大于等于,LT(less than)表示CMP比较结果是小于。因而三条指令实现了相同的功能。
ARM指令集中条件码如下图所示。
条件指令码中(Z)ero, (N)egative, (C)arry, o(V)erflow状态位是CPSR寄存器中的4个bit位,如下图所示,[31:27]4个bit分别对应N,Z,C,V,其含义如下表。关于CPSR的说明可以参看 《ARM体系架构—ARMv7-A处理器模式及寄存器》.
Field | 作用 |
---|---|
N | ALU返回运算结果是否为负数 |
Z | ALU返回运算结果是否为0 |
C | ALU运算是否发生进位 |
V | ALU运算是否发生溢出 |
三、ARMv7-A数据处理指令
ARM core只能在寄存器上执行数据处理,而不能直接在内存上执行。
数据操作指令一般由一个目标寄存器和两个源操作数组成,所有ARM数据处理指令都可以加后缀(Suffix),并影响状态标志(CPSR)。其基本格式如下:
O p e