主要介绍ARM微处理器指令集对应的概念,与其一般编码格式,可以为大家提供快速查询的便利,但要注意的是本文整理的是ARMv5TE及以下版本的微处理器,对于更高级的版本,可能会有新的指令出现,所以请注意查看自己使用的ARM处理器型号。
一、跳转指令
1、B指令——跳转指令
指令格式:B{条件} 目标地址
2、BL指令——带返回的跳转指令
指令格式:BL{条件} 目标地址
3、BLX指令——带返回和状态切换的跳转指令
指令格式:BLX 目标地址
4、BX指令——带状态切换的跳转指令
指令格式:BX{条件} 目标地址
二、数据处理指令
数据处理分为传输指令、算术逻辑指令和比较指令。
1、MOV指令——数据传输指令
指令格式:MOV{条件} {S} 目的寄存器,源操作数
2、MVN指令——取反传送指令
指令格式:MVN{条件} {S} 目的寄存器,源操作数
3、CMP指令——比较指令
指令格式:CMP{条件} {S} 操作数1,操作数2
4、CMN指令——反值比较指令
指令格式:CMN{条件} 操作数1,操作数2
5、TST指令——位测试指令
指令格式:TST{条件} 操作数1,操作数2
6、TEQ指令——相等测试指令
指令格式:TEQ{条件} 操作数1,操作数2
7、ADD指令——加法指令
指令格式:ADD{条件} {S} 目的寄存器,操作数1,操作数2
8、ADC指令——带进位的加法指令
指令格式:ADC{条件} {S} 目的寄存器,操作数1,操作数2
9、SUB指令——减法指令
指令格式:SUB{条件} {S} 目的寄存器,操作数1,操作数2
10、SBC指令——带借位的减法指令
指令格式:SBC{条件} {S} 目的寄存器,操作数1,操作数2
11、RSB指令——逆向减法指令
指令格式:RSB{条件} {S} 目的寄存器,操作数1,操作数2
12、RSC指令——带借位的逆向减法指令
指令格式:RSC{条件} {S} 目的寄存器,操作数1,操作数2
13、AND指令——逻辑“与”指令
指令格式:AND{条件} {S} 目的寄存器,操作数1,操作数2
14、ORR指令——逻辑“或”指令
指令格式:ORR{条件} {S} 目的寄存器,操作数1,操作数2
15、EOR指令——逻辑“异或”指令
指令格式:EOR{条件} {S} 目的寄存器,操作数1,操作数2
16、BIC指令——位清除指令
指令格式:BIC{条件} {S} 目的寄存器,操作数1,操作数2
三、乘法指令与乘加指令
1、MUL指令——32位乘法指令
指令格式:MUL{条件} {S} 目的寄存器,操作数1,操作数2
2、MLA指令——32位乘加指令
指令格式:MLA{条件} {S} 目的寄存器,操作数1,操作数2,操作数3
3、SMULL指令——64位有符号数乘法指令
指令格式:SMULL{条件} {S} 目的寄存器Low,目的寄存器High,操作数1,操作数2
4、SMLAL指令——64位有符号数乘加指令
指令格式:SMLAL{条件} {S} 目的寄存器Low,目的寄存器High,操作数1,操作数2
5、UMULL指令——64位无符号数乘法指令
指令格式:UMULL{条件} {S} 目的寄存器Low,目的寄存器High,操作数1,操作数2
6、UMLAL指令——64位无符号数乘加指令
指令格式:UMLAL{条件} {S} 目的寄存器Low,目的寄存器High,操作数1,操作数2
四、程序状态寄存器指令
1、MRS指令——程序状态寄存器到通用寄存器的数据传输指令
指令格式:MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)
2、MSR指令——通用寄存器到程序状态寄存器的数据传输指令
指令格式:MSR{条件} 程序状态寄存器(CPSR或SPSR)_<域>,操作数
五、加载/存储指令
1、LDR指令——字数据加载指令
指令格式:LDR{条件} 目的寄存器,<存储器地址>
2、LDRB指令——字节数据加载指令
指令格式:LDR{条件} B 目的寄存器,<存储器地址>
3、LDRH指令——半字数据加载指令
指令格式:LDR{条件}H 目的寄存器,<存储器地址>
4、STR指令——字数据存储指令
指令格式:STR{条件} 源寄存器,<存储器地址>
5、STRB指令——字节数据存储指令
指令格式:STR{条件}B 源寄存器,<存储器地址>
6、STRH指令——半字数据存储指令
指令格式:STR{条件}H 源寄存器,<存储器地址>
六、批量数据加载/存储指令
1、LDM指令——批量数据加载指令
指令格式:LDM{条件} {类型} 基址寄存器{!},寄存器列表{^}
2、STM指令——批量数据存储指令
指令格式:STM{条件} {类型} 基址寄存器{!},寄存器列表{^}
七、数据交换指令
1、SWP指令——字数据交换指令
指令格式:SWP{条件} 目的寄存器,源寄存器1,[源寄存器2]
2、SWPB指令——字节数据交换指令
指令格式:SWP{条件}B 目的寄存器,源寄存器1,[源寄存器2]
八、移位指令
1、LSL指令——对通用寄存器中的内容进行逻辑左移操作
指令格式:通用寄存器,LSL 操作数
2、ASL指令——对通用寄存器中的内容进行算术左移操作
指令格式:通用寄存器,ASL 操作数
3、LSR指令——对通用寄存器中的内容进行逻辑右移操作
指令格式:通用寄存器,LSR 操作数
4、ASR指令——对通用寄存器中的内容进行算术右移操作
指令格式:通用寄存器,ASR 操作数
5、ROR指令——对通用寄存器中的内容进行循环右移操作
指令格式:通用寄存器,ROR 操作数
6、RRX指令——对通用寄存器中的内容进行带扩展的循环右移操作
指令格式:通用寄存器,RRX 操作数
九、协处理器指令
1、CDP指令——ARM处理器通知ARM协处理器执行特定的操作,若协处理器不能成功完成特定操作,则产生未定义指令异常
指令格式:CDP{条件}协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,寄存器2,协处理器操作码2
2、LDC指令——将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。
指令格式:LDC{条件} {L} 协处理器编码,目的寄存器,[源寄存器]
3、STC指令——将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。
指令格式:STC{条件} {L} 协处理器编码,源寄存器,[目的寄存器]
4、MCR指令——将ARM处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能完成此操作,则产生未定义指令异常。
指令格式:MCR{条件}协处理器编码,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2
5、MRC指令——将协处理器寄存器中的数据传送到ARM处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。
指令格式:MRC{条件}协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2
十、异常中断指令
1、SWI指令——软件中断指令
指令格式:SWI{条件}24位的立即数
2、BKPT指令——断点中断指令
指令格式:BKPT 16位的立即数