2. 从内存中加载寄存器

2.1. 文件规范

符号:除特殊注明外, Rt, Rn 表示ARM寄存器R0-R7。 immN 表示具有N为宽度的即时值,因此 imm5 的范围限制为0-31。 [Rn + immN] 是通过添加Rn和误差 immN 获得的内存地址的内容。误差单位为字节。这些指令会影响条件标志。

2.2. 寄存器加载

  • ldr(Rt, [Rn, imm7]) Rt = [Rn + imm7] 加载一个32位字

  • ldrb(Rt, [Rn, imm5]) Rt = [Rn + imm5] 加载一个字节

  • ldrh(Rt, [Rn, imm6]) Rt = [Rn + imm6] 加载一个16位半字

一个字节或半字加载的情况下,它会被零扩展到32位。

指定即时误差单位为字节。因此,在 ldr 的情况下,7位值使得可用31字的最大偏移量来访问32位字对齐值。在 ldrh 的情况下,6位值使得可用31半字的最大偏移值访问16位半字对齐值。