Thumb指令集之:Thumb数据处理指令
11.4.25乘法指令MUL
(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>
11.4.26传送指令MVN
(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>
11.4.27取反指令NEG
(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
评论