Arm指令学习

持续更新文章...

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

你可能感兴趣的:(Arm指令学习)