2. 从内存中加载寄存器

2.1. 文档约定

符号:除非另有说明,否则表示 ARM 寄存器 R0-R7。表示具有 N 位宽度的立即数,因此被限制在 0-31 的范围内。是Rn和offset相加得到的内存地址的内容。偏移量以字节为单位。这些指令影响条件标志。Rt, Rn immNimm5[Rn + immN]immN

2.2. 寄存器加载

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

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

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

加载字节或半字时,零扩展到 32 位。

指定的立即偏移量以字节为单位。因此,ldr在 7 位值的情况下,可以访问 32 位字对齐的值,最大偏移量为 31 个字。在ldrh 6 位值的情况下,允许访问 16 位半字对齐值,最大偏移量为 31 个半字。