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

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

指令编码格式

内存地址计算方法

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

当U = 1时,address = Rn + offset_8

当U = 0时,address = Rn - offset_8

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

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

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

伪代码如下:

offset_8 = (immedH << 4) OR immedL

if U==1 then

    address = Rn + offset_8

else /*U == 0*/

    address = Rn - offset_8

使用说明:

 该寻址方式适合用在结构化数据的数据成员、参数存取以及栈中数据访问。当offset_8 = 0时,指令访问的即为Rn指向的内存数据单元。

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

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

    S标志位用于控制半字访问时的数据类型。当S=1时,数据为带符号数;当S=0时,数据为无符号数。

    当S=0且H=0时,表示无符号的字节数据。这种数据的寻址方式不属于现在讨论的这几种寻址方式。包含这种操作数的指令可能属于SWP/SWPB 指令,或者目前尚未实现的算术指令及Load/Store指令。

    S=1且L=0表示带符号数的Store指令。目前尚未实现该指令。

    当R15用作基址寄存器Rn时,内存基地址为当前指令地址加8字节偏移量。

    示例:
    LDRSB R0,[R1,#3]    ;将内存单元(R1+3)中的有符号字节数据读取到R0中

                                    ;将R0中高24位设置成该字节数据的符号位。

猜你喜欢

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