刘帅嵌入式系统-Load/Store指令寻址方式五

[<Rn>, +/-<Rm>]!

指令编码格式:

内存地址计算方法:

内存地址address为基址寄存器Rn的值加上/减去索引寄存器Rm的值。

当U = 1时,address = Rn + offset_12;

当U = 0时,address = Rn - offset_12。

当指令执行的条件满足时,生成的新地址值将写入基址寄存器Rn种。这种在指令的内存访问完成后进行基址寄存器内容更新的方式称为事先访问方式(pre-indexed)。

指令中寻址方式的语法格式:
[<Rn>, +/-<Rm>]!

-- !用于设置W位,更新基址寄存器的内容。

伪代码如下:

if U == 1 then

    address = Rn + Rm

else 

    address = Rn - Rm
if CondirionPassed(cond) then

    Rn = address

使用说明:

    B标志位用于控制指令操作的数据的类型,当B = 1时,指令访问的是无符号的字节数据;当B = 0时,指令访问的是字数据。

    L标志位用于控制内存操作的方向。当L = 1时,指令执行Load操作;当L = 0时,指令执行Store操作。

    当R15用作基址寄存器Rn时,会产生不可预期的结果。

    当Rn和Rm是同一个寄存器时,会产生不可预期的结果。

例子:

    LDR R0, [R1,R2]!  ;将内存单元(R1+R2)中的数据读取到R0中,同时R1 = R1 + R2

猜你喜欢

转载自blog.csdn.net/shuai532209720/article/details/88771223
今日推荐