ARM指令大全
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、跳转指令 (4)
1、B指令 (4)
2、BL指令 (4)
3、BLX指令 (4)
4、BX指令 (5)
二、数据处理指令 (5)
1、MOV指令 (5)
2、MVN指令 (5)
3、CMP指令 (6)
4、CMN指令 (6)
5、TST指令 (6)
6、TEQ指令 (7)
7、ADD指令 (7)
8、ADC指令 (7)
9、SUB指令 (7)
10、~~~~C指令 (8)
11、R~~~~指令 (8)
12、RSC指令 (8)
13、AND指令 (9)
14、ORR指令 (9)
15、EOR指令 (9)
16、BIC指令 (9)
三、法指令与乘加指令 (10)
1、MUL指令 (10)
2、MLA指令 (10)
3、SMULL指令 (10)
4、SMLAL指令 (11)
5、UMULL指令 (11)
6、UMLAL指令 (11)
四、程序状态寄存器访问指令 (12)
1、MRS指令 (12)
2、MSR指令 (12)
五、加载/存储指令 (12)
1、LDR指令 (12)
2、LDRB指令 (13)
3、LDRH指令 (14)
4、STR指令 (14)
5、STRB指令 (14)
6、STRH指令 (15)
六、批量数据加载/存储指令 (15)
LDM(或STM)指令 (15)
IA (15)
IB (15)
DA (15)
DB (15)
FD (15)
ED (15)
FA (15)
EA (15)
七、数据交换指令 (16)
1、SWP指令 (16)
2、SWPB指令 (16)
八、移位指令(操作) (16)
1、LSL(或ASL) (17)
2、LSR (17)
3、ASR (17)
4、ROR (17)
5、RRX (17)
九、协处理器指令 (18)
1、CDP指令 (18)
2、LDC指令 (18)
3、STC指令 (18)
4、MCR指令 (19)
5、MRC指令 (19)
十、异常产生指令 (19)
1、SWI指令 (19)
2、BKPT指令 (20)
一、符号定义(Symbol Definition)伪指令 (20)
1、GBLA、GBLL和GBLS (20)
2、LCLA、LCLL和LCLS (21)
3、SETA、SETL和SETS (22)
4、RLIST (22)
二、数据定义(Data Definition)伪指令 (23)
1、DCB (23)
2、DCW(或DCWU) (23)
3、DCD(或DCDU) (24)
4、DCFD(或DCFDU) (24)
5、DCFS(或DCFSU) (25)
6、DCQ(或DCQU) (25)
7、SPACE (25)
8、MAP (26)
9、FILED (26)
三、汇编控制(Assembly Control)伪指令 (27)
1、IF、ELSE、ENDIF (27)
2、WHILE、WEND (28)
3、MACRO、MEND (29)
4、MEXIT (29)
四、其他常用的伪指令 (30)
1、AREA (30)
2、ALIGN (31)
3、CODE16、CODE32 (31)
4、ENTRY (32)
5、END (32)
6、EQU (33)
7、EXPORT(或GLOBAL) (33)
8、IMPORT (34)
9、EXTERN (35)
10、GET(或INCLUDE) (35)
11、INCBIN (36)
12、RN (36)
13、ROUT (37)
一、跳转指令
跳转指令用于实现程序流程的跳转,在ARM程序中有两种方法可以实现程序流程的跳转:Ⅰ.使用专门的跳转指令。
Ⅱ.直接向程序计数器PC写入跳转地址值。
通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用
MOV LR,PC
等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。
ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:
1、B指令
B指令的格式为:
B{条件} 目标地址
B指令是最简单的跳转指令。一旦遇到一个B 指令,ARM 处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是24 位有符号数,左移两位后有符号扩展为32 位,表示的有效偏移为26 位(前后32MB的地址空间)。以下指令:
B Label ;程序无条件跳转到标号Label处执行
CMP R1,#0 ;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处执行
BEQ Label
2、BL指令
BL指令的格式为:
BL{条件} 目标地址
BL 是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14 的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令:
BL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存
到R14中
3、BLX指令
BLX指令的格式为: