Thumb指令集之: 单寄存器数据传送指令
11.5.3寄存器装载指令LDR(3)
(1)编码格式
寄存器装载指令LDR(3)的编码格式如图11.44所示。
图11.44LDR(3)指令的编码格式
寄存器装载指令LDR(3)允许将一个32位内存数据装载到通用寄存器。此种形式的LDR指令常被用于访问PC相关(PC-relative)数据。
(2)指令的语法格式
LDRRd>,[PC,#immed_8>*4]
①Rd>
目的寄存器。
②PC
程序指针寄存器,用于计算内存访问的地址。计算地址时,PC值的bit[1]被系统默认为0进行计算,所以产生的内存访问地址必为字对齐。
③immed_8>
8位立即数。该立即数的4倍将和PC值相加,形成内存访问地址。
(3)指令操作的伪代码
Address=(PC[31:2]2)+(immed_8*4)
Rd=Memory[address,4]
(4)对应的ARM指令
LDRRd>,[PC,#immed_8>*4]
11.5.4寄存器装载指令LDR(4)
(1)编码格式
寄存器装载指令LDR(4)的编码格式如图11.45所示。
图11.45LDR(4)指令的编码格式
寄存器装载指令LDR(4)允许将一个32位内存数据装载到通用寄存器。此种形式的LDR指令常被用于访问堆栈数据。
(2)指令的语法格式
LDRRd>,SP,#immed_8>*4]
①Rd>
目的寄存器。
②SP
堆栈指针寄存器,用于计算内存访问地址。
③immed_8>
8位立即数。该立即数的4倍将和SP值相加,形成内存访问地址。
(3)指令操作的伪代码
Address=SP+(immed_8*4)
Ifaddress[1:0]==0b00
Data=memory[address,4]
Else
Data=UNPREDICTABLE
Rd=data
(4)对应的ARM指令
LDRRd>,[SP,#immed_8>*4]
评论