Thumb指令集之:Thumb数据处理指令
immed_8> 8位立即数。指示要移入寄存器的数据。 (3)指令操作的伪代码 Rd=immed_8 NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=unaffected VFlag=unaffected (4)对应的ARM指令 MOVSRd>,#immed_8> (1)编码格式 数据传送指令MOV(2)的编码格式如图11.29所示。 图11.29MOV(2)指令的编码格式 此种形式的MOV指令用于数据在r0~r7低寄存器间传送,并根据的指令的执行结果更新程序状态寄存器的标志位。 注意 从指令的编码形式可以看出,MOV(2)指令被作为ADDRd,Rn,#0指令来编译。 (2)指令的语法格式 MOVRd>,Rn> ①Rd> 目的寄存器。存放指令的执行结果。 ②Rn> 源寄存器。用于存放被传送的数据。 (3)指令操作的伪代码 Rd=Rn NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=0 VFlag=0 (4)对应的ARM指令 ADDRd>,Rn>,#0 (1)编码格式 数据传送指令MOV(3)的编码格式如图11.30所示。 图11.30MOV(3)指令的编码格式 此种形式的MOV指令用于在r8~r14和PC寄存器的高16位内传送数据。与MOV(2)指令不同,该指令不影响程序状态寄存器。 (2)指令的语法格式 MOVRd>,Rm> ①Rd> 目的寄存器。可以是r0~r15中的任意寄存器,用于存放指令的执行结果。 ②Rm> 源寄存器。可以是r0~r15中的任意寄存器,用于存放被传输的数据。 (3)指令操作的伪代码 Rd=Rm (4)指令的使用 可以使用此种形式的MOV指令MOVPC,r14用于子程序的返回(返回的程序是Thumb子程序)。它和BX指令的区别在于BX指令可以用于ARM和Thumb程序间的相互调用。 注意 如果目的寄存器Rd>和源寄存器Rm>同时为r0~r7低寄存器,则指令的执行结果不可预知。 (5)对应的ARM指令 MOVRd>,Rm> (1)编码格式 乘法指令MUL的编码格式如图11.31所示。 图11.31MUL指令的编码格式 MUL指令实现两个数(可以为无符号数,也可以为有符号数)的乘积,并将指令的执行结果存放到一个32位的寄存器中,同时可以根据运算结果设置CPSR寄存器中相应的条件标志位。 (2)指令的语法格式 MULRd>,Rm> ①Rd> 目的寄存器,存放乘法操作的第一个乘数。 ②Rm> 第二个乘数所在寄存器。 (3)指令操作的伪代码 Rd=(Rm*Rd)[31:0] NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=unaffected VFlag=unaffected 注意 如果乘法指令MUL的源和目的寄存器使用相同的寄存器,则指令的执行结果不可预知;对于有符号数和无符号数,指令的操作结果是一样的。 (4)对应的ARM指令 MULSRd>,Rm>,Rd> (1)编码格式 传送指令MVN的编码格式如图11.32所示。 图11.32MVN指令的编码格式 MVN指令将一个数的反码传送到目标寄存器,并根据指令的执行结果更新CPSR中相应的条件标志位。 (2)指令的语法格式 MVNRd>,Rm> ①Rd> 目的寄存器,存放指令的操作结果。 ②Rm> 源寄存器,存放要传送反码的数据。 (3)指令操作的伪代码 Rd=NOTRm NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=unaffected VFlag=unaffected (4)对应的ARM指令 MVNSRd>,Rm> (1)编码格式 取反指令NEG的编码格式如图11.33所示。 图11.33NEG指令的编码格式 NEG取反指令将一个寄存器的值取反存入另一个寄存器。同时根据指令的操作结果更新CPSR中相应的条件标志位。 (2)指令的语法格式 NEGRd>,Rm> ①Rd> 目的寄存器,存放指令的操作结果。 ②Rm> 源寄存器,包含将要被取反的数据。 (3)指令操作的伪代码 Rd=0–Rm NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=NOTBorrowFrom(0-Rm) VFlag=OverflowFrom(0-Rm) (4)对应的ARM指令 RSBSRd>,Rm>,#0 (1)编码格式 逻辑或指令ORR的编码格式如图11.34所示。 图11.34ORR指令的编码格式 ORR指令将两个寄存器的值做按位做或运算,并根据指令的执行结果更新程序状态寄存器的标志位。 (2)指令的语法格式 ORRRd>,Rm> ①Rd> 目的寄存器,存放指令的操作结果,存放做逻辑或运算的其中一个操作数。 ②Rm> 存放做逻辑或运算的另一个操作数。 (3)指令操作的伪代码 Rd=RdORRm NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=unaffected VFlag=unaffected (4)对应的ARM指令 ORRSRd>,Rd>,Rm> (1)编码格式 循环右移指令ROR的编码格式如图11.35所示。 图11.35ROR指令的编码格式 ROR指令将一个给定寄存器的值循环右移一定的位数。并根据指令的操作结果更新状态寄存器的条件标志位11.4.23移位指令MOV(2)
11.4.24移位指令MOV(3)
11.4.25乘法指令MUL
11.4.26传送指令MVN
11.4.27取反指令NEG
11.4.28逻辑或指令ORR
11.4.29循环右移指令ROR
Thumb指令集 数据处理指令 ARM MOV指令 移位指令 相关文章:
- 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)