新闻中心

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

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

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

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

杂类Load/Store指令的解码格式如图4.23所示。

图4.23 杂类Load/Store指令解码格式

编码格式中各标志位的含义如表4.5所示。

表4.5 杂类Load/Store指令编码格式各标志位含义

位 标 识

取 值

含 义

P

P=0

使用后索引寻址

P=1

使用偏移地址或前索引寻址(由W位决定)

续表

位 标 识

取 值

含 义

U

U=0

访问的地址=基址寄存器的值-偏移量(offset)

U=1

访问的地址=基址寄存器的值+偏移量(offset)

W

W=0

如果P=0,使用后索引寻址;P=1,指令不改变基址寄存器的值

W=1

如果P=0,未定义指令;如果P=1,将计算的内存访问地址回写到基址寄存器

L

L=0

Store指令

L=1

Load指令

S

S=0

无符号半字内存访问

S=1

有符号半字内存访问

H

H=0

字节访问

H=1

半字访问

注意

当S=0并且H=0时,并非无符号的字节内存访问指令。无符号的内存访问指令不使用该种寻址方式,详见本章上一节。

当S=1并且L=0时,并非是有符号的存储指令,而是未定义指令。指令并未区分有符号和无符号的字节和半字存储。

1.[Rn,#±offset_8>]

(1)编码格式

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

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

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

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

(2)

LDR|STR{cond>}H|SH|SB|D Rd>,[Rn>,#±offset_12>]

其中:

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

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

(3)操作伪代码

offset_8 = (immedH 4) OR immedL

If U = = 1 then

Address = Rn + offset_8

Else

Address = Rn – offset_8

(4)说明

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

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



评论


相关推荐

技术专区

关闭