决定从最简单的指令开始学习。
常用ARM指令集及汇编
一、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-空操作伪指令