Thumb指令集之: 单寄存器数据传送指令
字节数据读取到指令中的目标寄存器中,并将寄存器的高24位清零。常用于结构体的数据访问。域的基地址放在Rn寄存器中。
(2)指令的语法格式
LDRBRd>,[Rn>,#immed_5>]
①Rd>
目的寄存器。
②Rn>
指令的基址寄存器。
③immed_5>
5位立即数。用于与Rn>寄存器中的数值相加,形成内存访问地址。
(3)指令操作的伪代码
address=Rn+immed_5
Rd=memory[address,1]
(4)对应的ARM指令
LDRBRd>,[Rn>,#immed_5>]
11.5.6字节加载指令LDRB(2)
(1)编码格式
字节加载指令LDRB(2)的编码格式如图11.47所示。
图11.47LDRB(2)指令的编码格式
LDRB(2)字节数据加载指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中,并将寄存器的高24位清零。此种形式的LDRB(2)指令常用于数组元素的访问。
(2)指令的语法格式
LDRBRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
存放形成内存访问地址的第一个寄存器。
③Rm>
存放形成内存访问地址的第二个寄存器。
(3)指令操作的伪代码
address=Rn+Rm
Rd=Memory[address,1]
(4)对应的ARM指令
LDRBRd>,[Rn>,Rm>]
11.5.7半字加载指令LDRH(1)
(1)编码格式
半字数据加载指令LDRH(1)的编码格式如图11.48所示。
图11.48LDRH(1)指令的编码格式
LDRH(1)半字数据加载指令用于从内存中将一个16位的半字数据读取到指令中的目标寄存器中,并将寄存器的高16位清零。常用于结构体的数据访问。域的基地址放在Rn寄存器中。
(2)指令的语法格式
LDRHRd>,[Rn>,#immed_5>*2]
①Rd>
目的寄存器。
②Rn>
指令的基址寄存器。
③immed_5>
5位立即数。该寄存器数值的2倍将与Rn>寄存器中的数值相加,形成内存访问地址。
(3)指令操作的伪代码
address=Rn+(immed_5*2)
ifaddress[0]==0
data=Memory[address,2]
else
data=UNPREDICTABLE
Rd=data
(4)对应的ARM指令
LDRHRd>,[Rn>,#immed_5>*2]
11.5.8半字数据加载指令LDRH(2)
(1)编码格式
半字数据加载指令LDRH(2)的编码格式如图11.49所示。
LDRH(2)字节数据加载指令用于从内存中将一个16位的半字数据读取到指令中的目标寄存器中,并将寄存器的高16位清零。此种形式的LDRH(2)指令常用于数组元素的访问。
图11.49LDRH(2)指令的编码格式
(2)指令的语法格式
LDRBRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
此寄存器存放内存访问基地址。
③Rm>
此寄存器存放内存访问偏移地址。
(3)指令操作的伪代码
address=Rn+Rm
ifaddress[0]==0
data=memory[address,2]
else
data=UNPREDICTABLE
Rd=data
(4)对应的ARM指令
LDRHRd>,[Rn>,Rm>]
11.5.9有符号字节数据加载指令LDRSB
(1)编码格式
有符号字节数据加载指令LDRSB的编码格式如图11.50所示。
图11.50LDRSB指令的编码格式
LDRSB指令用于从内存中将一个8位的字节数据读取到指令中的目标寄存器中,并将寄存器的高24位设置成该字节数据的符号位的值(即将该8位字节数据进行符号位扩展,生成32位字数据)。
(2)指令的语法格式
LDRSBRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
此寄存器存放内存访问基地址。
③Rm>
此寄存器存放内存访问偏移地址。
(3)指令操作的伪代码
address=Rn+Rm
Rd=SignExtend(Memory[address,1])
(4)对应的ARM指令
LDRSBRd>,[Rn>,Rm>]
11.5.10有符号半字数据加载指令LDRSH
(1)编码格式
有符号字节数据加载指令LDRSH的编码格式如图11.51所示。
图11.51LDRSH指令的编码格式
LDRSH指令用于从内存中将一个16位的半字数据读取到指令中的目标寄存器中,并将寄存器的高16位设置成该半字数据的符号位的值(即将该16位半字数据进行符号位扩展,生成32位字数据)。
(2)指令的语法格式
LDRBHRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
此寄存器存放内存访问基地址。
③Rm>
此寄存器存放内存访问偏移地址。
(3)指令操作的伪代码
address=Rn+Rm
ifaddress[0]==0
data=memory[address,2]
else
data=UNPREDICTABLE
Rd=SignExtend[data]
(4)对应的ARM指令
LDRSHRd>,[Rn>,Rm>]
11.5.11寄存器存储指令STR(1)
(1)编码格式
寄存器存储指令STR(1)的编码格式如图11.52所示。
图11.52STR(1)指令的编码格式
这种形式的STR指令将32位通用寄存器的数值存储到内存中。该指令常用于结构体的数据访问。域的基地址放在Rn寄存器中。
(2)指令的语法格式
STRRd>,[Rn>,#immed_5>*4]
①Rd>
目的寄存器。用于存放从内存中取出的数据。
②R
Thumb指令集 单寄存器数据传送指令 ARM 寄存器装载指令 LDR(1) 相关文章:
- Thumb指令集之: Thumb指令的特点及实现(08-30)
- Thumb指令集之: Thumb跳转指令(08-30)
- Thumb指令集之: Thumb指令应用(08-30)
- Thumb指令集之: ARM和Thumb的混合编程(08-30)
- Thumb指令集与ARM指令集的区别(11-21)
- Thumb指令集之: Thumb指令应用(09-30)