ARM指令寻址方式之: 内存访问指令寻址
(2)语法格式
opcode>{cond>}{L} coproc>,CRd>,[Rn>,#±offset_8>*4]
其中:
· Rn>为基址寄存器,包含寻址操作的基地址;
· offset_8>为8位立即数,该值的4倍为地址偏移量。
(3)操作伪代码
If ConditionPassed(cond) then
If U = = 1 then
Address = Rn + offset_8 * 4
Else /*U = = 0*/
Address = Rn – offset_8 * 4
Start_address = address
While (NotFinished(coprocessor[cp_num]))
Address = address +4
End_address = address
(4)说明
如果基址寄存器指定为程序计数器r15,则基地址为当前执行指令地址加8。
2.[Rn>,#±offset_8>*4]!
(1)编码格式
指令的编码格式如图4.37所示。
图4.37 协处理器Load/Store指令——前索引立即数寻址
该寻址方式指定一片连续的内存地址空间。访问内存单元的第一个地址first_addressing>等于基址寄存器Rn>的值加上/减去指令中寄存器值的4倍。如果指令的条件域满足,产生的first_addressing>回写到基址寄存器Rn中。接下来的内存访问地址是前一个访问地址加4。当协处理器发出传输中止信号时,数据传送结束。
这种寻址方式的数据传输数目由协处理器决定。
注意 | 这种寻址方式最多允许传输16的字。 |
(2)语法格式
opcode>{cond>}{L} coproc>,CRd>,[Rn>,#±offset_8>*4]!
其中:
· Rn>为基址寄存器,包含寻址操作的基地址;
· offset_8>为8位立即数,该值的4倍为地址偏移量;
· !设置指令编码中的W位,更新指令基地址。
(3)操作伪代码
If ConditionPassed(cond) then
If U = = 1 then
Rn = Rn + offset_8 * 4
Else /*U = = 0*/
Rn = Rn – offset_8 * 4
Start_address = Rn
Address = start_address
While (NotFinished(coprocessor[cp_num]))
Address = address +4
End_address = address
(4)说明
如果基址寄存器指定为程序计数器r15,则指令的执行结果不可预知。
3.[Rn>],#±Offset_8>*4
(1)编码格式
指令的编码格式如图4.38所示。
图4.38 协处理器Load/Store指令——后索引立即数寻址
该寻址方式指定一片连续的内存地址空间。访问内存单元的第一个地址first_addressing>等于基址寄存器Rn>的值。接下来的内存访问地址是前一个访问地址加4。当协处理器发出传输中止信号时,数据传送结束。如果指令的条件域满足,Rn基址寄存器的值更新为Rn的值加上/减去8位立即数的4倍。
这种寻址方式的数据传输数目由协处理器决定。
注意 | 这种寻址方式最多允许传输16的字。 |
评论