新闻中心

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

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

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

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

1.[Rn,#±offset_12>]

(1)编码格式

指令的编码格式如图4.14所示。

图4.14 内存访问指令——立即数偏移寻址编码格式

内存访问地址为基址寄存器Rn的值加(或减)立即数offset_12。

编程中,在访问结构体或记录(record)类型的变量时,这些内存的操作指令是十分有效的。另外,在子程序中也常用这些指令访问本地变量和堆栈。

(2)

LDR|STR{cond>}{B}{T} Rd>,[Rn>,#±offset_12>]

其中:

· Rn为基址寄存器,该寄存器包含内存访问的基地址;

· offset_12>为12位立即数,内存访问地址偏移量。

(3)操作伪代码

If U = = 1 then

Address = Rn + offset_12

Else

Address = Rn – offset_12

(4)说明

① 如果指令中没有指定立即数,使用[Rn>],编译器按[Rn>,#0]形式编码。

② 如果Rn被指定为程序计数器r15,其值为当前指令地址加8。

2.[Rn,±Rm]

(1)编码格式

指令的编码格式如图4.15所示。

图4.15 内存访问指令——寄存器偏移寻址编码格式

内存访问地址为基址寄存器Rn的值加(或减)偏移寄存器Rm的值。

该寻址方式适合使用指针访问字节数组中的数据成员。

(2)

LDR|STR{cond>}{B}{T} Rd>,[Rn>,±Rm>]

其中:

· Rn为基址寄存器,该寄存器包含内存访问的基地址;

· Rm>为偏移地址寄存器,包含内存访问地址偏移量。

(3)操作伪代码

If U = = 1 then

Address = Rn + Rm

Else

Address = Rn – Rm

(4)说明

如果Rn被指定为程序计数器r15,其值为当前指令地址加8;如果r15被用作偏移地址寄存器Rm的值,指令的执行结果不可预知。

3.[Rn,Rm,shift># offset_12>]

(1)编码格式

指令的编码格式如图4.16所示。

图4.16 内存访问指令——带移位的寄存器偏移寻址编码格式

内存地址为Rn的值加/减通过移位操作后的Rm的值。

当数组中的成员长度大于1个字节时,使用该寻址方式可高效率地访问数组成员。



评论


相关推荐

技术专区

关闭