一、存储器访问指令
二、数据处理指令
数据处理指令大致可分为3类:数据传送指令;算术逻辑运算指令;比较指令。
数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使用S后缀,并影响状态标志。
(1)、数据传送指令
MOV指令将8位图立即数或寄存器传送到目标寄存器(Rd),可用于移位运算等操作。
例如:MOV R3, R1, LSL #3 ;R3=R1×8
MOV指令用于将数据从一个寄存器传送到另一个寄存器中,或者将一个常数传送到一个寄存器中,但是不能访问内存。LDR指令用于从内存中读取数据放入寄存器中。
(2)、算术逻辑运算指令
(3)、比较指令
比较指令将两个数值进行的特定运算,根据运算结果影响CPSR的相关标志位,用于后面程序的条件执行,但是运算结果不予保存。
CMP:数值比较。将寄存器的值减去操作数的值
CMN:负数比较。将寄存器的值加上操作数的值。结果为0,z=1;否则z=0;
TST:位测试。寄存器的值与操作数的值按位"与"操作。结果为0,z=1;否则z=0;
TEQ:相等测试。寄存器的值与操作数的值按位"异或"操作。结果为0,z=1;否则z=0;
三、分支指令
1、在ARM中有两种方式可以实现程序的跳转:
(1)直接向PC寄存器赋值实现跳转;例: MOV PC, R14
(2)使用分支指令直接跳转。
B:分支指令
BL:带链接的分支指令
BX:带状态切换的分支指令
四、杂项指令
1、程序状态寄存器读指令:MRS
在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。例如:
MRS R1, CPSR ; 读取CPSR状态寄存器到R1
MRS R2, SPSR ; 读取SPSR状态寄存器到R2
2、程序状态寄存器写指令:MSR
在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式等操作。
五、伪指令
在汇编程序中经常会使用一些其他的伪指令,包括以下18条:
ASSERT AREA
ALIGN CODE16/CODE32
ENTRY END
EQU IMPORT
EXPORT/GLOBAL EXTERN
INCBIN GET/INCLUDE
RN ROUT
ADR ADRL
LDR NOP