ARM指令寻址方式之: 内存访问指令寻址
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的字。 |
(2)语法格式
<opcode>{<cond>}{L} <coproc>,<CRd>,[<Rn>],#±<offset_8>*4
其中:
· <Rn>为基址寄存器,包含寻址操作的基地址;
· <offset_8>为8位立即数,该值的4倍为地址偏移量。
(3)操作伪代码
If ConditionPassed(cond) then
Start_address = Rn
If U = = 1 then
Rn = Rn + offset_8 * 4
Else /*U = = 0*/
Rn = Rn – offset_8 * 4
Address = start_address
While (NotFinished(coprocessor[cp_num]))
Address = address +4
End_address = address
(4)说明
如果基址寄存器指定为程序计数器r15,则指令的执行结果不可预知。
4.[<Rn>], <Option>
(1)编码格式
指令的编码格式如图4.39所示。
图4.39 协处理器Load/Store指令--直接寻址
该寻址方式指定一片连续的内存地址空间。访问内存单元的第一个地址<first_addressing>等于基址寄存器<Rn>的值。接下来的内存访问地址是前一个访问地址加4。当协处理器发出传输中止信号时,数据传送结束。
指令不更新基址寄存器的值。指令编码格式中bits[7:0]保留,所以可以将空闲位用作协处理器指令扩展。
这种寻址方式的数据传输数目由协处理器决定,最多可以传输16字。
(2)语法格式
<opcode>{<cond>}{L} <coproc>,<CRd>,[<Rn>],<Option>
其中:
· <Rn>为基址寄存器,包含寻址操作的基地址;
· <option>用作协处理器指令扩展。
(3)操作伪代码
If ConditionPassed(cond) then
Start_address = Rn
Address = start_address
While (NotFinished(coprocessor[cp_num]))
Address = address +4
End_address = address
(4)说明
如果基址寄存器指定为程序计数器r15,则寻址基地址为当前指令地址加8。
- ARM指令寻址方式之: 数据处理指令的寻址方式(08-13)
- ARM汇编指令ARM寻址方式、汇编指令、伪指令(11-20)
- 单片机的指令和寻址方式(11-13)
- ARM 指令的寻址方式(11-11)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)