APSR状态寄存器
- 所有ARM汇编指令后带S的如ADDS,都会设置状态寄存器。
-
N
negative,结果是负数时置1 -
Z
zero,结果为零时置1 -
C
carry, 如果目标寄存器放不下了就置1 -
V
overflow,如果此次操作出现了溢出就置1
.W扩展
- 强制使用32bitARM
指令集规则
MNEMONIC{S}{condition} {Rd}, Operand1, Operand2
条件执行
IT{x{y{z}}} cond TE代表条件相反
栈与栈帧
默认满栈降序规则,即PUSH先减后放,POP先取后加。
栈帧寄存器指向函数前序期压栈保存寄存器前的栈底。一般先压LR后R11(FP),之后才申请栈上空间(即减SP)。结束时直接依据FP恢复LR以及上层FP。
关于STM,LDM
IA为后序递增,DA为后序递减,后序就是存取操作后再移动指针。注意递减时,寄存器访问也是降序的。因为ARM中高地址内存一般与高序号的寄存器关联
偏移以及取址模式
如何区分取址模式:
- 如果有一个叹号!,那就是索引前置取址模式,即使用计算后的地址,之后更新基址寄存器。
ldr r3, [r1, #4]!
ldr r3, [r1, r2]!
ldr r3, [r1, r2, LSL#2]!
- 如果在[]外有一个寄存器,那就是索引后置取址模式,即使用原有基址寄存器重的地址,之后再更新基址寄存器
ldr r3, [r1], #4
ldr r3, [r1], r2
ldr r3, [r1], r2, LSL#2
- 除此之外,就都是偏移取址模式了
ldr r3, [r1, #4]
ldr r3, [r1, r2]
ldr r3, [r1, r2, LSL#2]
- 地址模式:用作偏移
- 地址模式:前向索引
- 地址模式:后向索引