一、 ARM处理器的寻址方式
二、指令集学习
(一) ARM 指令集
1. 指令格式
2. 条件码
3. ARM 存储器访问指令
1) LDR/ STR -加载 /存储指令
2) LDM/ STM -多寄存器加载 /存储指令
3) SWP -寄存器和存储器交换指令
4. ARM 数据处理指令
1) 数据传送指令
a) MOV -数据传送指令
b) MVN -数据非传送指令
2) 算术逻辑运算指令
a) ADD -加法运算指令
b) SUB -减法运算指令
c) RSB- 逆向减法指令
d) ADC -带进位加法指令
e) SBC -带进位减法指令
f) RSC -带进位逆向减法指令
g) AND -逻辑“与”
h) ORR -逻辑“或”
i) EOR -逻辑“异或”
j) BIC -位清除指令
3) 比较指令
a) CMP -比较指令
b) CMN -负数比较指令
c) TST -位测试指令
d) TEQ -相等测试指令
4) 乘法指令
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 -数据取负指令
2) 算术逻辑运算指令
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 -循环右移指令
3) 比较指令
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 -空操作伪指令