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 位半字对齐的值。