「这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战」。
ARM32中寄存器别名补充
寄存器 | 别名 | 用途 |
---|---|---|
r0 | a1 | 第一个函数参数和函数返回值 |
r1 | a2 | 第二个函数参数 |
r2 | a3 | 第三个函数参数 |
r3 | a4 | 第四个函数参数 |
r4 | v1 | 寄存器变量 |
r5 | v2 | 寄存器变量 |
r6 | v3 | 寄存器变量 |
r7 | v4 | 寄存器变量 |
r8 | v5 | 寄存器变量 |
r9 | v6 | 寄存器变量 实际的帧指针 |
r10 | sl | 栈接线 |
r11 | fp | 参数指针 |
r12 | ip | 临时 |
r13 | sp | 栈指针 |
r14 | lr | 连接寄存器 |
r15 | pc | 程序计数器 |
如何编译16位arm汇编指令
AREA test, CODE
code16 ;声明为16位arm指令 如果不写默认则为code32
END
复制代码
附:指令集汇总
(一) ARM 指令集
1. 指令格式
2. 条件码
3. ARM 存储器访问指令
-
LDR/ STR -加载 /存储指令
-
LDM/ STM -多寄存器加载 /存储指令
-
SWP -寄存器和存储器交换指令
4. ARM 数据处理指令
- 数据传送指令
a) MOV -数据传送指令
b) MVN -数据非传送指令
- 算术逻辑运算指令
a) ADD -加法运算指令
b) SUB -减法运算指令
c) RSB- 逆向减法指令
d) ADC -带进位加法指令
e) SBC -带进位减法指令
f) RSC -带进位逆向减法指令
g) AND -逻辑“与”
h) ORR -逻辑“或”
i) EOR -逻辑“异或”
j) BIC -位清除指令
- 比较指令
a) CMP -比较指令
b) CMN -负数比较指令
c) TST -位测试指令
d) TEQ -相等测试指令
- 乘法指令
a) MUL - 32位乘法指令
b) MLA - 32位乘加指令
c) UMULL - 64位无符号乘法指令
d) UMLAL - 64位无符号乘加指令
e) SMULL - 64位有符号乘法指令
f) SMLAL - 64位有符号乘加指令
5. ARM 分支指令
-
B -分支指令
-
BL -带连接的分支指令
-
BX -带状态切换的分支指令
6. ARM 协处理器指令
-
CDP -协处理器数据操作指令
-
LDC -协处理器数据读取指令
-
STC -协处理器数据写入指令
-
MCR - ARM处理器到协处理器的数据传送指令
-
MRC -协处理器到 ARM处理器的数据传送指令
7. ARM 杂项指令
-
SWI -软中断指令
-
MRS -读状态寄存器指令
-
MSR -写状态寄存器指令
8. ARM 伪指令
-
ADR -小范围的地址读取伪指令
-
ADRL -中等范围的地址读取伪指令
-
LDR -大范围的地址读取伪指令
-
NOP -空操作伪指令
(二) Thumb 指令集
1. Thumb 指令集和 ARM指令集的区别
2. Thumb 存储器访问指令
-
LDR/ STR -加载 /存储指令
-
PUSH/ POP -寄存器入栈 /出栈指令
-
LDMIA/ STMIA -多寄存器加载 /存储指令
3. Thumb 数据处理指令
- 数据传送指令
a) MOV -数据传送指令
b) MVN -数据非传送指令
c) NEG -数据取负指令
- 算术逻辑运算指令
a) ADD -加法运算指令
b) SUB -减法运算指令
c) ADC -带进位加法指令
d) SBC -带进位减法指令
e) MUL -乘法运算指令
f) AND -逻辑“与”
g) ORR -逻辑“或”
h) EOR -逻辑“异或”
i) BIC -位清除指令
j) ASR -算术右移指令
k) LSL -逻辑左移指令
l) LSR -逻辑右移指令
m) ROR -循环右移指令
- 比较指令
a) CMP -比较指令
b) CMN -负数比较指令
c) TST -位测试指令
4. Thumb 分支指令
-
B -分支指令
-
BL -带连接的分支指令
-
BX -带状态切换的分支指令
5. Thumb 杂项指令
- SWI -软中断指令
6. Thumb 伪指令
-
ADR -小范围的地址读取伪指令
-
LDR -大范围的地址读取伪指令
-
NOP -空操作伪指令