ARM32汇编语言之寄存器别名和指令补充

850 阅读3分钟

「这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战」。

ARM32中寄存器别名补充

寄存器别名用途
r0a1第一个函数参数和函数返回值
r1a2第二个函数参数
r2a3第三个函数参数
r3a4第四个函数参数
r4v1寄存器变量
r5v2寄存器变量
r6v3寄存器变量
r7v4寄存器变量
r8v5寄存器变量
r9v6寄存器变量 实际的帧指针
r10sl栈接线
r11fp参数指针
r12ip临时
r13sp栈指针
r14lr连接寄存器
r15pc程序计数器

如何编译16位arm汇编指令

  	AREA test, CODE
  	code16		;声明为16位arm指令 如果不写默认则为code32 
  	
    END			

附:指令集汇总

(一) ARM 指令集

1. 指令格式

2. 条件码

3. ARM 存储器访问指令

  1. LDR/ STR -加载 /存储指令

  2. LDM/ STM -多寄存器加载 /存储指令

  3. SWP -寄存器和存储器交换指令

4. ARM 数据处理指令

  1. 数据传送指令

a) MOV -数据传送指令

b) MVN -数据非传送指令

  1. 算术逻辑运算指令

a) ADD -加法运算指令

b) SUB -减法运算指令

c) RSB- 逆向减法指令

d) ADC -带进位加法指令

e) SBC -带进位减法指令

f) RSC -带进位逆向减法指令

g) AND -逻辑“与”

h) ORR -逻辑“或”

i) EOR -逻辑“异或”

j) BIC -位清除指令

  1. 比较指令

a) CMP -比较指令

b) CMN -负数比较指令

c) TST -位测试指令

d) TEQ -相等测试指令

  1. 乘法指令

a) MUL - 32位乘法指令

b) MLA - 32位乘加指令

c) UMULL - 64位无符号乘法指令

d) UMLAL - 64位无符号乘加指令

e) SMULL - 64位有符号乘法指令

f) SMLAL - 64位有符号乘加指令

5. ARM 分支指令

  1. B -分支指令

  2. BL -带连接的分支指令

  3. BX -带状态切换的分支指令

6. ARM 协处理器指令

  1. CDP -协处理器数据操作指令

  2. LDC -协处理器数据读取指令

  3. STC -协处理器数据写入指令

  4. MCR - ARM处理器到协处理器的数据传送指令

  5. MRC -协处理器到 ARM处理器的数据传送指令

7. ARM 杂项指令

  1. SWI -软中断指令

  2. MRS -读状态寄存器指令

  3. MSR -写状态寄存器指令

8. ARM 伪指令

  1. ADR -小范围的地址读取伪指令

  2. ADRL -中等范围的地址读取伪指令

  3. LDR -大范围的地址读取伪指令

  4. NOP -空操作伪指令

(二) Thumb 指令集

1. Thumb 指令集和 ARM指令集的区别

2. Thumb 存储器访问指令

  1. LDR/ STR -加载 /存储指令

  2. PUSH/ POP -寄存器入栈 /出栈指令

  3. LDMIA/ STMIA -多寄存器加载 /存储指令

3. Thumb 数据处理指令

  1. 数据传送指令

a) MOV -数据传送指令

b) MVN -数据非传送指令

c) NEG -数据取负指令

  1. 算术逻辑运算指令

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 -循环右移指令

  1. 比较指令

a) CMP -比较指令

b) CMN -负数比较指令

c) TST -位测试指令

4. Thumb 分支指令

  1. B -分支指令

  2. BL -带连接的分支指令

  3. BX -带状态切换的分支指令

5. Thumb 杂项指令

  1. SWI -软中断指令

6. Thumb 伪指令

  1. ADR -小范围的地址读取伪指令

  2. LDR -大范围的地址读取伪指令

  3. NOP -空操作伪指令