持续更新文章...
0:后缀学习
| 后缀 | 含义 |
|---|---|
| S | SUB R1,R0,R3 R0的值减去R3的值,结果存入R1 SUBS R1,R0,R3 R0的值减去R3的值,刷新CPSR |
| ! | LDR R3,[R0,#4] 将R0+4作为地址指针,把这个指针的地址单元的数据读入R3 LDR R3,[R0,#4]! 将R0+4作为地址指针,把这个指针的地址单元的数据读入R3,还把R0+4的结果送入到R0 |
1:寻址方式
| 方式 | 含义 |
|---|---|
| 多寄存器寻址 | 加载 |
1:指令条件码
| 条件码 | 助记符 | 标志 | 含义 |
|---|---|---|---|
| 0000 | EQ | Z = 1 | 相等 |
| 0001 | NE | Z = 0 | 不相等 |
| 0010 | CS/HS | C = 1 | 无符号数大于或等于 |
| 0011 | CC/LO | C = 0 | 无符号数小于 |
| 0100 | MI | N = 1 | 负数 |
| 0101 | PL | N = 0 | 正数或零 |
| 0110 | VS | V = 1 | 溢出 |
| 0111 | VC | V = 0 | 没有溢出 |
| 1000 | HI | C = 1,Z = 0 | 无符号数大于 |
| 1001 | LS | C = 0,Z = 1 | 无符号数小于或等于 |
| 1010 | GE | N = V | 有符号数大于或等于 |
| 1011 | LT | N != V | 有符号书小于 |
| 1100 | GT | Z = 0, N = V | 有符号数大于 |
| 1101 | LE | Z = 1, N != V | 有符号数小于或等于 |
| 1110 | AL | 任何 | 无条件执行(指令默认条件) |
2:ARM指令
| 助记符 | 指令功能描述 | 助记符 | 指令功能描述 |
|---|---|---|---|
| ADC | 带进位加法指令 | MRC | 从协处理器寄存器到ARM寄存器的数据传输指令 |
| ADD | 加法指令 | MRS | 传送CPSR或SPSR的内容到通用寄存器指令 |
| AND | 逻辑与指令 | MSR | 传送通用寄存器到CPSR或SPSR的指令 |
| B | 分支指令 | MUL | 32位乘法指令 |
| BIC | 位清除指令 | MLA | 32位乘加指令 |
| BL | 带返回的分支指令 | MVN | 数据取反传送指令 |
| BLX | 带返回和状态切换的分支指令 | ORR | 逻辑或指令 |
| BX | 带状态切换的分支指令 | RSB | 逆向减法指令 |
| CDP | 协处理器数据操作指令 | RSC | 带借位的逆向减法指令 |
| CMN | 比较反值指令 | SBC | 带借位减法指令 |
| CMP | 比较指令 | STC | 协处理器寄存器写入存储器指令 |
| EOR | 异或指令 | STM | 批量内存字写入指令 |
| LDC | 存储器到协处理器的数据传输指令 | STR | 寄存器到存储器的数据存储指令 |
| LDM | 加载多个寄存器指令 | SUB | 减法指令 |
| LDR | 存储器到寄存器的数据加载指令 | SWI | 软件中断指令 |
| MCR | 从ARM寄存器到协处理器寄存器的数据传输指令 | SWP | 交换指令 |
| MOV | 数据传输指令 | TEQ | 相等测试指令 |
2:跳转指令
| 指令 | 含义 |
|---|---|
| B | 最简单的跳转指令 |
3:数据存储指令
| 指令 | 含义 |
|---|---|
| LDR | 加载 |
4:比较指令
| 指令 | 含义 |
|---|---|
| CMP比较指令 | CMP R1,R0 实际上是R1-R0,同时刷新CPSR,但是并不存储结果 |
| CMN反值比较指令 | CMN R0,R1 实际上就是R0+R1,并根据结果刷新CPSR |
| TST位测试指令 | TST R0,R1 将R0和R1按位进行与运算,并根据结果刷新CPSR |
| TEQ相等测试指令 | TEQ R0,R1 将R0和R1寄存器的值进行按位异或,刷新CPSR |
5:数据传送指令
| 指令 | 含义 |
|---|---|
| MOV | MOV R0,#5 将立即数5传送到寄存器R0,带S影响结果的CPSR的N和Z值 |
| MVN | MOV R1,R2 将R2按位取反,传送到R1,带S影响结果的CPSR的N和Z值 |
6:移位指令
| 指令 | 含义 |
|---|---|
| LSL | 逻辑左移 |
| LSR | 逻辑右移 |
| ASR | 算术右移 |
| ROR | 循环右移 |
| RRX | 带扩展的循环右移 |
7:算术指令
| 指令 | 含义 |
|---|---|
| ADD加法 | ADD R0,R1,R2 实际上是R0 = R1+R2,带S的时候刷新CPSR的N,Z,C,V |
| ADC带进位加法 | ADDS R0,R2,R4 加低32位,S表示结果影响CPSR的N,Z,C,V ADD R1,,R3,R5 加高32位,带进位 |
| SUB减法 | SUB R0,R1,R2 R0 = R1 - R2 有S的时候刷新CPSR的N,Z,C,V |
| SBC带借位减法 | SUBS R0,R2,R4 低32位相减,S表示影响CPSR的N,Z,C,V SBC R1,R3,R5 高32位相减 |
| RSB逆向减法 | RSB R0,R1,R2 R0 = R2 - R1 |
| RSC带借位的逆向减法 | 加载 |
8:逻辑运算指令
| 指令 | 含义 |
|---|---|
| AND逻辑与 | AND |
| ORR逻辑或 | 加载 |
| EOR逻辑异或 | 加载 |
| BIC位清除 | 加载 |
| LDR | 加载 |
9:比较指令
| 指令 | 含义 |
|---|---|
| CMP | CMP R1,#10 将寄存器R1的值和10相减, 并设置CPSR的标志位 |
| ORR逻辑或 | 加载 |
| EOR逻辑异或 | 加载 |
| BIC位清除 | 加载 |
| LDR | 加载 |
更新日期-18/09/10