ARM汇编中的一些规则

APSR状态寄存器

  • 所有ARM汇编指令后带S的如ADDS,都会设置状态寄存器。
  • Nnegative,结果是负数时置1
  • Zzero,结果为零时置1
  • Ccarry, 如果目标寄存器放不下了就置1
  • Voverflow,如果此次操作出现了溢出就置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中高地址内存一般与高序号的寄存器关联

偏移以及取址模式

如何区分取址模式:

  1. 如果有一个叹号!,那就是索引前置取址模式,即使用计算后的地址,之后更新基址寄存器
ldr   r3, [r1, #4]!
ldr   r3, [r1, r2]!
ldr   r3, [r1, r2, LSL#2]!
  1. 如果在[]外有一个寄存器,那就是索引后置取址模式,即使用原有基址寄存器重的地址,之后再更新基址寄存器
ldr   r3, [r1], #4
ldr   r3, [r1], r2
ldr   r3, [r1], r2, LSL#2
  1. 除此之外,就都是偏移取址模式
ldr   r3, [r1, #4]
ldr   r3, [r1, r2]
ldr   r3, [r1, r2, LSL#2]
  • 地址模式:用作偏移
  • 地址模式:前向索引
  • 地址模式:后向索引
    原文作者:Arnow117
    原文地址: https://www.jianshu.com/p/0277280d8e35
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞