新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 数据传送指令之:单寄存器的Load/Store指令

数据传送指令之:单寄存器的Load/Store指令

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

本文引用地址:http://www.eepw.com.cn/article/257080.htm

LDR指令根据addr_mode>所确定的地址模式将一个32位字读取到指令中的目标寄存器Rd>。如果指令中的寻址方式确定的地址不是字对齐的,则读出的数值要进行循环右移。所移位数为寻址方式确定的地址bits[1∶0]8的倍,也就是说处理器将取到的数值作为字的最低位处理。

如果设置了L位,则进行装载,否则进行存储。

如果设置了P位,则使用预先变址寻址,否则使用过后变址寻址。

如果设置了U位,则给出的偏移量被加到基址寄存器上,否则从中减去偏移量。

如果设置了B位,传送内存的一个字节,否则传送一个字。这在助记符末尾添加后缀“B”,如MOV r7,r5变为MOVB r7,r5。

W位的解释依赖于使用的地址模式。

· 对于预先变址寻址,设置W位强制把它用做地址转换的最终地址写回基址寄存器中(例如,传送的副作用是Rn:= Rn +/-offset。这在汇编器中表示为给指令加上后缀“!”。)。

· 对于过后变址寻址,地址总是写回,设置 W 位指示在进行传送之前强制地址转换。这在汇编器中表示为给指令加上后缀“T”。

当PC作为LDR的目的寄存器Rd>时,从存储器取得的数据将被当作目标地址值,程序将跳转到目标地址开始执行。

(2)指令的语法格式

LDR{cond>} Rd>,addr_mode>

① cond>

为指令编码中的条件域。它指示LDR指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。

② Rd>

确定使用哪个通用寄存器作为目标寄存器。

③ addr_mode>

它确定了指令编码中的I、P、U、W、Rn和addr_mode>位。所有的寻址模式中,都会确定一个基址寄存器Rn。

(3)指令操作的伪代码

指令操作的伪代码如下面程序段所示。

If ConditionPassed{cond} then

If address[1:0] == 0b00 then

Value = Memory[address,4]

Else if address[1:0] == 0b01 then

Value = Memory[address,4] Rotate_Right 8

Else if address[1:0] == 0b10 then

Value = Memory[address,4] Rotate_Right 16

Eles /* address[1:0] == 0b11*/

Value = Memory[address,4] Rotate_Right 24

If (Rd is R15) then

If (architecture version 5 or above) then

PC = value AND 0xfffffffe

T Bit = value[0]

Else

PC = value AND 0xfffffffc

Else

Rd = value

(4)指令举例

LDR r1,[r0,#0x12] ;将r0+12地址处的数据读出,保存到r1中(r0的值不变)

LDR r1,[r0] ;将r0地址处的数据读出,保存到r1中(零偏移)

LDR r1,[r0,r2] ;将r0+r2地址的数据读出,保存到r1中(r0的值不变)

LDR r1,[r0,r2,LSL #2] ;将r0+r2×4地址处的数据读出,保存到r1中(r0,r2的值不变)

LDR Rd,label ;label为程序标号,label必须是当前指令的±4KB范围内

LDR Rd,[Rn],#0x04 ;Rn的值用作传输数据的存储地址。在数据传送后,将偏移量0x04与

Rn相加,结果写回到Rn中。Rn不允许是r15

注意

地址对齐问题:大多数情况下,必须保证用于32位传送的地址是32位对齐的。

存储器相关文章:存储器原理




评论


相关推荐

技术专区

关闭