数据传送指令之:单寄存器的Load/Store指令
cond>
为指令编码中的条件域。它指示LDRH指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。
② Rd>
确定使用哪个通用寄存器作为目标寄存器。
注意 | 如果PC作为目标寄存器,指令的执行结果不可预知。 |
③ addr_mode>
它确定了指令编码中的I、P、U、W、Rn和addr_mode>位。所有的寻址模式中,都会确定一个基址寄存器Rn。
(3)指令操作的伪代码
if ConditionPassed{cond} then
if address[0]==0
data=Memory[address,2]
else /*address[0]==1*/
data=unpredictable
Rd=data
注意 | 在包含系统控制协处理器的芯片应用中,如果定义了地址对齐检测,当bit[0]!=0时,将发生地址对齐异常。 |
2.STRH指令
(1)指令编码格式
STRH指令从寄存器中取出指定的16位半字放入寄存器的低16位,并将寄存器的高位补0。
指令的编码格式如图5.8所示。
图5.8 STRH指令的编码格式
(2)指令的语法格式
STR{cond>}H Rd>,addr_mode>
① cond>
指令编码中的条件域。它指示STRH指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。
② Rd>
确定使用哪个通用寄存器作为目标寄存器。
注意 | 如果PC作为目标寄存器,指令的执行结果不可预知。 |
③ addr_mode>
它确定了指令编码中的I、P、U、W、Rn和addr_mode>位。所有的寻址模式中,都会确定一个基址寄存器Rn。
(3)指令操作的伪代码
if ConditionPassed{cond} then
if address[0]==0
data=Rd[15:0]
else /*address[0]==1*/
data=unpredictable
Memory[address,2]=data
5.3.4 用户模式字数据传送指令(LDRT/STRT)
1.LDRT指令
(1)指令编码格式
LDRT指令用于从内存中将一个32位的字读取到目标寄存器。
指令的编码格式如图5.9所示。
LDRT指令根据addr_mode>所确定的地址模式将一个32位字读取到指令中的目标寄存器Rd>。如果指令中的寻址方式确定的地址不是字对齐的,则读出的数值要进行循环右移。所移位数为寻址方式确定的地址bits[1∶0]的8倍。也就是说处理器将取到的数值作为字的最低位处理。
图5.9 LDRT指令编码格式
当处理器在特权模式下使用此指令时,内存系统将该操作当作一般用户模式下得内存访问指令。
注意 | 指令的编码格式中,P位指定位“0”,也就是说LDRT指令的寻址方式为固定寻址方式,即后索引编码寻址(post_indexed_addressing_mode)。 |
(2)指令的语法格式
LDR{cond>}T Rd>,post_indexed_addressing_mode>
① cond>
为指令编码中的条件域。它指示LDRT指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。
② Rd>
确定使用哪个通用寄存器作为目标寄存器。
③ post_indexex_address_mode>
使用后索引地址模式寻址。
注意 | 后索引地址模式中P=0并且W=0(即bit[21]=0、bit[24]=0)。但此指令P=0并且W=1(即bit[21]=1、bit[24]=0)。但实际的寻址操作是一样的。 |
(3)指令操作的伪代码
指令操作的伪代码如下面程序段所示。
If ConditionPassed{cond} then
If address[1:0]==0b00
Rd=Memory[address,4]
Else if address[1:0]==0b01
Rd=Memory[address,4] Rotate_Right 8
Else if address[1:0]==0b10
Rd=Memory[address,4] Rotate_Right 16
Else address[1:0]==0b11
Rd=Memory[address,4] Rotate_Right 24
2.STRT指令
(1)指令编码格式
STRT指令用于将一个32位的字数据写入到指令中指定的内存单元。
当处理器在特权模式下执行此指令时,内存系统将该操作当作一般用户模式下的内存访问操作。
指令的编码格式如图5.10所示。
图5.10 STR指令编码格式
(2)指令的语法格式
STR{cond>}T Rd>,post_indexed_addressing_mode>
① cond>
为指令编码中的条件域。它指示STRT指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。
② Rd>
确定使用哪个通用寄存器作为目标寄存器。
③ post_indexed_address_mode>
使用后索引地址模式寻址,参见LDRT指令。
(3)指令操作的伪代码
指令操作的伪代码如下面程序段所示。
If ConditionPassed{cond} then
Memory[address,4]=Rd
5.3.5 用户模式字节数据传送指令(LDRBT/STRBT)
1.LDRBT指令
(1)指令编码格式
LDRBT指令根据post_indexed_addressing_mode>地址模式将一个8位字节读取到指令中的目标寄存器Rd>。
当处理器在特权模式下执行此指令时,内存系统将该操作当作一般用户模式下的内存访问操作。
指令的编码格式如图5.11所示。
图5.11 LDRBT指令编码格式
注意 | LDRBT指 |
数据传送指令 单寄存器 Load Store指令 微处理器 ARM 相关文章:
- 数据传送指令之:MOV指令(08-13)
- 数据传送指令之:MVN指令(08-13)
- 数据传送指令之:单数据交换指令(08-13)
- Thumb指令集之: 多寄存器数据传送指令(09-30)
- Thumb指令集之: 单寄存器数据传送指令(09-30)
- 数据传送指令之: 程序状态寄存器指令(09-13)