ARM 指令列表
ADC
|
带进位的32位数加法
|
ADD
|
32位数相加
|
AND
|
32位数的逻辑与
|
B
|
在32M空间内的相对跳转指令
|
BIC
|
32位数的逻辑位清零
|
BKPT
|
断点指令
|
BL
|
带链接的相对跳转指令
|
BLX
|
带链接的切换跳转
|
BX
|
切换跳转
|
CDP CDP2
|
协处理器数据处理操作
|
CLZ
|
零计数
|
CMN
|
比较两个数的相反数
|
CMP
|
32位数比较
|
EOR
|
32位逻辑异或
|
LDC LDC2
|
从协处理器取一个或多个32位值
|
LDM
|
从内存送多个32位字到ARM寄存器
|
LDR
|
从虚拟地址取一个单个的32位值
|
MCR MCR2 MCRR
|
从寄存器送数据到协处理器
|
MLA
|
32位乘累加
|
MOV
|
传送一个32位数到寄存器
|
MRC MRC2 MRRC
|
从协处理器传送数据到寄存器
|
MRS
|
把状态寄存器的值送到通用寄存器
|
MSR
|
把通用寄存器的值传送到状态寄存器
|
MUL
|
32位乘
|
MVN
|
把一个32位数的逻辑“非”送到寄存器
|
ORR
|
32位逻辑或
|
PLD
|
预装载提示指令
|
QADD
|
有符号32位饱和加
|
QDADD
|
有符号双32位饱和加
|
QSUB
|
有符号32位饱和减
|
QDSUB
|
有符号双32位饱和减
|
RSB
|
逆向32位减法
|
RSC
|
带进位的逆向32法减法
|
SBC
|
带进位的32位减法
|
SMLAxy
|
有符号乘累加(16位*16位)+32位=32位
|
SMLAL
|
64位有符号乘累加((32位*32位)+64位=64位)
|
SMALxy
|
64位有符号乘累加((32位*32位)+64位=64位)
|
SMLAWy
|
号乘累加((32位*16位)>>16位)+32位=32位
|
SMULL
|
64位有符号乘累加(32位*32位)=64位
|
SMULxy
|
有符号乘(16位*16位=32位)
|
SMULWy
|
有符号乘(32位*16位>>16位=32位)
|
STC STC2
|
从协处理器中把一个或多个32位值存到内存
|
STM
|
把多个32位的寄存器值存放到内存
|
STR
|
把寄存器的值存到一个内存的虚地址内间
|
SUB
|
32位减法
|
SWI
|
软中断
|
SWP
|
把一个字或者一个字节和一个寄存器值交换
|
TEQ
|
等值测试
|
TST
|
位测试
|
UMLAL
|
64位无符号乘累加((32位*32位)+64位=64位)
|
UMULL
|
64位无符号乘累加(32位*32位)=64位
|
编辑本段详解
1.跳转指令
在ARM中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向PC寄存器(R15)中写入目标地址值。
通过直接向PC寄存器中写入目标地址值可以实现在46B地址空间中任意跳转,这种跳转指令又称为长跳转。如果在长跳转指令之前使用MOV LR,PC等指令,则可以保存将来返回的地址值,这样就实现了在46B地址空间中的子程序调用。
在ARM版本5及以上的体系中,实现了ARM指令集和Thumb指令集的混合使用。指令使用目标地址值的bit[0]来确定目标程序的类型。bit[0]的值为1时,目标程序为Thumb指令;bit[0]值为0时,目标程序为ARM指令。
在ARM版本5以前的体系中,传送到PC寄存器中的目标地址值的低两位bits[1∶0]被忽略,跳转指令只能在ARM指令集中执行,即程序不能从ARM状态切换到Thumb状态。非T系列ARM版本5体系不含Thumb指令,当程序试图切换到Thumb状态时,将产生未定义指令异常中断。
ARM跳转指令可以从当前指令向前或向后的32MB地址空间跳转。这类跳转指令有以下4种。
(1)B 跳转指令
B〔条件) (地址)
B指令属于ARM指令集,是最简单的分支指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的地址,从那里继续执行。注意:存储在分支指令中的实际值是相对当前R15的值的一个偏移量,而不是一个绝对地址。它的值由汇编器来计算,是24位有符号数,左移两位后有符号扩展为32位,表示的有效偏移位为26位(+/- 32 MB)。
(2)BL 带返回的跳转指令
BI,〔条件) (地址)
BL指令也属于ARM指令集,是另一个分支指令。就在分支之前,在寄存器R14中装载上R15的内容,因此可以重新装载R14到R15中来返回到这个分支之后的那个指令处执行,它是子例程的一个基本但强力的实现。
(3)BLX 带返回和状态切换的跳转指令
BLX <地址>
BLX指令有两种格式,第1种格式的BLX指令记作BLX(1)。BLX(1)从ARM指令集跳转到指令中指定的目标地址,并将程序状态切换到Thumb状态,该指令同时将PC寄存器的内容复制到LR寄存器中。
BLX(1)指令属于无条件执行的指令。
第2种格式的BLX指令记作BLX(2)。BLX(2)指令从ARM指令集跳转到指令中指定的目标地址,目标地址的 指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器<dest>中,该地址的bit[0]值为0,目标地址处的指令 类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。
(4)BX 带状态切换的跳转指令
BX(条件) (dest)
BX指令跳转到指令中指定的目标地址,目标地址处的指令可以是ARM指令,也可以是Thumb指令。目标地址值为指令的值和0xFl·FFFFFF做“与”操作的结果,目标地址处的指令类型由寄存器决定。