[<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