Linux基础 -- ARM 32位常用机器码(指令)整理
2025/3/1 13:33:47
来源:https://blog.csdn.net/sz66cm/article/details/145930358
浏览:
次
关键词:Linux基础 -- ARM 32位常用机器码(指令)整理
ARM 32位常用机器码(指令)整理
1. 数据处理指令(运算、逻辑、比较)
指令 | 含义 | 示例 | 备注 |
---|
MOV | 赋值(寄存器传输) | MOV R0, R1 | 直接将 R1 复制到 R0 |
MVN | 取反 | MVN R0, R1 | R0 = ~R1 |
ADD | 加法 | ADD R0, R1, R2 | R0 = R1 + R2 |
ADC | 带进位加法 | ADC R0, R1, R2 | R0 = R1 + R2 + C (进位) |
SUB | 减法 | SUB R0, R1, R2 | R0 = R1 - R2 |
SBC | 带借位减法 | SBC R0, R1, R2 | R0 = R1 - R2 - !C |
RSB | 逆向减法 | RSB R0, R1, #0 | R0 = 0 - R1 |
AND | 按位与 | AND R0, R1, R2 | R0 = R1 & R2 |
ORR | 按位或 | ORR R0, R1, R2 | `R0 = R1 |
EOR | 按位异或 | EOR R0, R1, R2 | R0 = R1 ^ R2 |
BIC | 按位清除 | BIC R0, R1, R2 | R0 = R1 & ~R2 |
CMP | 比较 | CMP R0, R1 | 计算 R0 - R1 并设置标志 |
TST | 按位测试 | TST R0, R1 | 计算 R0 & R1 并设置标志 |
2. 乘法和除法指令
指令 | 含义 | 示例 | 备注 |
---|
MUL | 无符号乘法 | MUL R0, R1, R2 | R0 = R1 * R2 |
MLA | 乘法累加 | MLA R0, R1, R2, R3 | R0 = (R1 * R2) + R3 |
MLS | 乘法减法 | MLS R0, R1, R2, R3 | R0 = R3 - (R1 * R2) |
UMULL | 无符号长乘法 | UMULL R0, R1, R2, R3 | R1:R0 = R2 * R3 |
SMULL | 有符号长乘法 | SMULL R0, R1, R2, R3 | R1:R0 = R2 * R3 |
UDIV | 无符号除法 | UDIV R0, R1, R2 | R0 = R1 / R2 (ARMv7 以上) |
SDIV | 有符号除法 | SDIV R0, R1, R2 | R0 = R1 / R2 (ARMv7 以上) |
3. 数据传输指令(加载/存储)
指令 | 含义 | 示例 | 备注 |
---|
LDR | 加载数据 | LDR R0, [R1] | R0 = *(R1) 读取 R1 指向的内存 |
STR | 存储数据 | STR R0, [R1] | *(R1) = R0 |
LDM | 批量加载 | LDMIA R0!, {R1-R3} | 读取多个寄存器 |
STM | 批量存储 | STMDB R0!, {R1-R3} | 存储多个寄存器 |
PUSH | 入栈 | PUSH {R0, R1} | ARM 栈向低地址增长 |
POP | 出栈 | POP {R0, R1} | |
4. 分支与跳转指令
指令 | 含义 | 示例 | 备注 |
---|
B | 无条件跳转 | B label | |
BL | 过程调用 | BL function | 进入子程序,返回地址存 LR |
BX | 返回或跳转 | BX LR | 过程返回(ARM/Thumb 切换) |
BLX | 远程跳转 | BLX R0 | 可能涉及 Thumb 模式 |
5. 系统控制指令
指令 | 含义 | 示例 | 备注 |
---|
NOP | 空指令 | NOP | 什么都不做 |
SVC | 软中断 | SVC #0 | 系统调用 |
MRS | 读 CPSR | MRS R0, CPSR | 读取状态寄存器 |
MSR | 写 CPSR | MSR CPSR, R0 | 修改状态寄存器 |
WFI | 进入低功耗 | WFI | 等待中断 |
总结
ARM 32 位指令集中,最常用的指令包括:
- 数据处理:
MOV
、ADD
、SUB
、CMP
、AND
- 加载/存储:
LDR
、STR
、PUSH
、POP
- 分支:
B
、BL
、BX
- 系统控制:
NOP
、SVC
、MRS
、MSR