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

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


[, #+/-<offset>]!/<offset>

指令编码格式


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


内存地址计算方法

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

当U = 1时,address = Rn + offset_8

当U = 0时,address = Rn - offset_8

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

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

[, #+/-<offset>]!/<offset>

-- 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的用法与[, #+/-<offset>]指令相同。/<offset>

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

示例:

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

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


分享到:


相關文章: