新闻中心

EEPW首页>嵌入式系统>设计应用> ARM指令寻址方式之: 内存访问指令寻址

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

作者: 时间:2013-09-13 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257083.htm

(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的字。



评论


相关推荐

技术专区

关闭