ARM 汇编语言

1. 什么是汇编语言?

计算机处理器,执行的是 二进制的 10101010001,这些机器码对应的助记符就是汇编指令。

处理器 fetch 到的指令是 1001010101, 可能就是 对应汇编语言中 ADD 的加法指令, 处理器执行 加法操作,并把结果输出到目的寄存器。

ARM 汇编语言_第1张图片

ARM (RISC)指令长度固定为 32 bits。

2. ARM 指令集

ARM 指令集可以分为下面六类:

ARM 汇编语言_第2张图片

ARM 汇编语言_第3张图片

ARM 汇编语言_第4张图片

3. 常见 ARM 汇编指令定义:

3.1 MOV 数据传送指令

MOV Rd,

Rd 是目的寄存器, 是操作数。

ARM 汇编语言_第5张图片

ARM 汇编语言_第6张图片
注意 MOV 指令,op2 如果是 立即数,立即数必须小于 65535(0xFFFF),所以如果给 int i = 0x11111111;ARM 汇编对应的是以下两条指令:

S:0x80002040 : MOV      r1,#0x1111
S:0x80002044 : MOVT     r1,#0x1111

ARM 汇编语言_第7张图片


[ARM 官方文档库] http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjagdjbf.html

ARM 汇编语言_第8张图片

ARM 汇编语言_第9张图片

3.2 ADD:

ARM 汇编语言_第10张图片

3.3 LDM:

ARM 汇编语言_第11张图片

3.4 加载寄存器指令 LDR:

在 ARM 中,word 长度是 32 bits, half word 是 16 bits, Byte 是 8 bits.

ARM 汇编语言_第12张图片

 

3.5 数据传送指令 MOV:

ARM 汇编语言_第13张图片

3.6 Store 多个 Register 指令 STM:

ARM 汇编语言_第14张图片

ARM 汇编语言_第15张图片

3.7 Store Register 指令 STR:

ARM 汇编语言_第16张图片

 

4.  Offset Addressing & Pre-Index Addressing & Post-Index Addressing

4.1 Offset Addressing:

Offset Addressing 指令例子: LDR R0, [R1, #4] 这种寻址方式,不会改变 Base 寄存器 R1 的值。(只寻址,不改 Base 寄存器)

ARM 汇编语言_第17张图片

4.2 Pre-Index Addressing

Pre-Index Addressing 指令例子: LDR R0, [R1, #4]! 这种寻址方式,会改变 Base 寄存器 R1 的值。

先将寻址的内容加载到 R0 寄存器,再将寻址的地址回写到 Base 寄存器 R1。(先寻址,后改 Base 寄存器)

ARM 汇编语言_第18张图片

4.3 Post-Index Addressing

Post-Index Addressing 指令例子: LDR R0, [R1], #4 这种寻址方式,会改变 Base 寄存器 R1 的值。

先将 Base 寄存器 R1内容加载到 R0 寄存器,再将寻址的地址回写到 Base 寄存器 R1,(先读 Base 寄存器,后改 Base 寄存器)

ARM 汇编语言_第19张图片

[] 内存寻址

5. ARM 指令总结:

ARM 汇编语言_第20张图片
 

参考文献:

ARM_AssyLang.pdf

你可能感兴趣的:(ARM)