[<Rn>],+/-<Rm>
指令编码格式
内存地址计算方法:
指令使用基址寄存器Rn的值作为实际内存访问的地址。
当指令执行的条件满足时,将基址寄存器的值加上/减去索引寄存器Rm的值,生成新的地址。
当U = 1时,address = Rn + Rm。
当U = 0时,address = Rn - Rm。
最后将新的地址值写入基址寄存器Rn中。方式称为事后访问方式。
指令中寻址方式的语法格式如下:
[<Rn>],#/-<Rm>
计算内存实际地址的伪代码如下:
address = Rn
if ConditionPassed(Cond) then
if U == 1 then
Rn = Rn + Rm
else /* U == 0*/
Rn = Rn - Rm
使用说明:
B标志位用于控制指令操作的数据的类型,当B = 1时,指令访问的是无符号的字节数据;当B = 0时,指令访问的是字数据。
L标志位用于控制内存操作的方向。当L = 1时,指令执行Load操作;当L = 0时,指令执行Store操作。
当R15用作基址寄存器Rn或Rm时,会产生不可预期的结果。
当Rn和Rm是同一个寄存器时,会产生不可预期的结果
例子:
LDR R0, [R1],R2 ;将地址为R1内存单元数据读取到R0寄存器中,然后R1 = R1 +R2