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

[<Rn>, #+/-<offset_8>]!

指令编码格式

内存地址计算方法

内存地址address为基址寄存器的值加上/减去偏移量offset_8。

当U = 1时,address = Rn + offset_8

当U = 0时,address = Rn - offset_8

当指令执行条件满足时,生产的地址值将写入基址寄存器Rn中。这种方式为事先访问方式。

指令中寻址方式的语法格式

[<Rn>, #+/-<offset_8>]!

-- offset_8为地址偏移量,被编码成高4位immedH和低4位immedL。

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

伪代码如下:

offset_8 = (immedH << 4) OR immedL

if U==1 then

    address = Rn + offset_8

else /*U == 0*/

    address = Rn - offset_8

if ConditionPassed(cond) then

    Rn = address

使用说明:

该寻址方式适合访问数组时,自动进行数组下标的更新。

标志位L、S的用法与[<Rn>, #+/-<offset_8>]指令相同。

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

    示例:
    LDRSH R7,[R6,#2]    ;将内存单元(R6+2)中的字节数据读取到R7中

                                    ;将R7中高16位设置成该半字的符号位。R6=R6+2

猜你喜欢

转载自blog.csdn.net/shuai532209720/article/details/88983706