微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM指令寻址方式之: 内存访问指令寻址

ARM指令寻址方式之: 内存访问指令寻址

时间:08-13 来源:3721RD 点击:

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。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top