Thumb指令集之: 单寄存器数据传送指令
n>
基址寄存器,用于存放所取数据的基地址。
③immed_5>
5位立即数。该立即数的4倍加上基址寄存器的值为目标地址。
(3)指令操作的伪代码
address=Rn+(immed_5*4)
ifaddress[1:0]==0b00
Memory[address,4]=Rd
Else
Memory[address,4]=UNPREDICTABLE
(4)对应的ARM指令
STRRd>,[Rn>,#immed_5>*4]
11.5.12寄存器存储指令STR(2)
(1)编码格式
寄存器存储指令STR(2)的编码格式如图11.53所示。
图11.53STR(2)指令的编码格式
寄存器装载指令STR(2)将一个32位通用寄存器数据存储到内存单元中。此种形式的STR指令常被用于访问数组中的元素。
(2)指令的语法格式
LDRRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
存放形成内存访问地址的第一个寄存器。
③Rm>
存放形成内存访问地址的第二个寄存器。
(3)指令操作的伪代码
address=Rn+Rm
ifaddress[1:0]==0b00
Memory[address,4]==Rd
Else
Memory[address,4]==UNPREDICTABLE
(4)对应的ARM指令
STRRd>,[Rn>,Rm>]
11.5.13寄存器存储指令STR(3)
(1)编码格式
寄存器存储指令STR(3)的编码格式如图11.54所示。
图11.54STR(3)指令的编码格式
寄存器存储指令STR(3)允许将一个32位通用寄存器的值存储到内存。此种形式的STR指令常被用于访问堆栈数据。
(2)指令的语法格式
STRRd>,[SP,#immed_8>*4]
①Rd>
目的寄存器。
②SP
堆栈指针寄存器,用于计算内存访问的地址。
③immed_8>
8位立即数。该立即数的4倍将和堆栈指针寄存器SP的值相加,形成内存访问地址。
(3)指令操作的伪代码
address=SP+(immed_8*4)
ifaddress[1:0]==0b00
Memory[address,4]=Rd
Else
Memory[address,4]=UNPREDICTABLE
(4)对应的ARM指令
STRRd>,[SP,#immed_8>*4]
11.5.14字节存储指令STRB(1)
(1)编码格式
字节存储加载指令STRB(1)的编码格式如图11.55所示。
图11.55STRB(1)指令的编码格式
STRB(1)字节数据存储指令用于将一个8位的字节数据写入到指令中指定的内存单元,该字节数据为指令中存放源操作数寄存器的低8位。常用于结构体的数据访问。域的基地址放在Rn寄存器中。
(2)指令的语法格式
STRBRd>,[Rn>,#immed_5>]
①Rd>
目的寄存器。
②Rn>
指令的基址寄存器。
③immed_5>
5位立即数。用于与Rn>寄存器中的数值相加,形成内存访问地址。
(3)指令操作的伪代码
address=Rn+immed_5
Memory[address,1]=Rd[7:0]
(4)对应的ARM指令
STRBRd>,[Rn>,#immed_5>]
11.5.15寄存器存储指令STRB(2)
(1)编码格式
寄存器存储指令STRB(2)的编码格式如图11.56所示。
图11.56STRB(2)指令的编码格式
寄存器存储指令STRB(2)用于将一个8位的字节数据写入到指令中指定的内存单元。此种形式的LDRB指令常被用于访问数组中的元素。
(2)指令的语法格式
STRBRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
此寄存器存放内存访问基地址。
③Rm>
此寄存器存放内存访问偏移地址。
(3)指令操作的伪代码
address=Rn+Rm
Memory[address,1]=Rd[7:0]
(4)对应的ARM指令
STRBRd>,[Rn>,Rm>]
11.5.16半字存储指令STRH(1)
(1)编码格式
半字存储加载指令STRH(1)的编码格式如图11.57所示。
图11.57STRH(1)指令的编码格式
STRH(1)半字数据存储指令用于将一个16位的半字数据写入到指令中指定的内存单元,该半字数据为指令中存放源操作数寄存器的低16位。常用于结构体的数据访问。域的基地址放在Rn寄存器中。
(2)指令的语法格式
STRHRd>,[Rn>,#immed_5>*2]
①Rd>
目的寄存器。
②Rn>
指令的基址寄存器。
③immed_5>
5位立即数。该立即数的2倍与Rn>寄存器中的数值相加,形成内存访问地址。
(3)指令操作的伪代码
address=Rn+(immed_5*2)
ifaddress[1:0]==0
Memory[address,2]=Rd[15:0]
Else
Memory[address,2]=UNPREDICTABLE
(4)对应的ARM指令
STRHRd>,[Rn>,#immed_5>*2]
11.5.17寄存器存储指令STRH(2)
(1)编码格式
寄存器存储指令STRH(2)的编码格式如图11.58所示。
图11.58STRH(2)指令的编码格式
寄存器存储指令STRH(2)用于将一个8位的半字数据写入到指令中指定的内存单元。此种形式的STRH指令常被用于访问数组中的元素。
(2)指令的语法格式
STRHRd>,[Rn>,Rm>]
①Rd>
目的寄存器。
②Rn>
存放形成内存访问地址的第一个寄存器。
③Rm>
存放形成内存访问地址的第二个寄存器。
(3)指令操作的伪代码
address=Rn+Rm
ifaddress[1:0]==0
Memory[address,2]=Rd[
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)