Thumb指令集之:Thumb数据处理指令
11.4.31减法指令SUB(1)
(1)编码格式
减法指令SUB(1)的编码格式如图11.37所示。
图11.37SUB(1)指令的编码格式
SUB(1)指令从指定寄存器减去3位立即数(取值范围为0~8),并把指令的操作结果保存到寄存器,同时根据结果更新CPSR中相应的条件标志位。
(2)指令的语法格式
SUBRd>,Rn>,#immed_3>
①Rd>
目的寄存器,存放指令的操作结果。
②Rn>
被减数寄存器,包含减法操作的被减数。
③immed_3>
作为减数的立即数,该立即数的取值范围为0~8。
(3)指令操作的伪代码
Rd=Rn–immed_3
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=NOTBorrowFrom(Rn–immed_3)
VFlag=OverflowFrom(Rn–immed_3)
(4)对应的ARM指令
SUBSRd>,Rn>,#immed_3>
11.4.32减法指令SUB(2)
(1)编码格式
减法指令SUB(2)的编码格式如图11.38所示。
SUB(2)指令从指定寄存器减去8位立即数(即,取值范围为0~256),并把指令的操作结果保存到寄存器,同时根据结果更新CPSR中相应的条件标志位。
图11.38SUB(2)指令的编码格式
(2)指令的语法格式
SUBRd>,#immed_8>
①Rd>
第一个源操作数所在的寄存器,存放减法操作的被减数,同时将减法操作的执行结果保存到该寄存器。
②immed_8>
8位立即数,即减法操作的减数,取值范围为0~255。
(3)指令操作的伪代码
Rd=Rd–immed_8
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=NOTBorrowFrom(Rn–immed_8)
VFlag=OverflowFrom(Rn–immed_8)
(4)对应的ARM指令
SUBSRd>,Rd>,#immed_8>
11.4.33减法指令SUB(3)
(1)编码格式
减法指令SUB(3)的编码格式如图11.39所示。
图11.39SUB(3)指令的编码格式
SUB(3)指令将指定寄存器的值和另一个寄存器表示的值做减法运算,并根据指令的操作结果更新状态寄存器的标志位。
(2)指令的语法格式
SUBRd>,Rn>,Rm>
①Rd>
目的寄存器,存放指令操作的结果。
②Rn>
源寄存器,存放第一个操作数,即减法运算的被减数。
③Rm>
源寄存器,存放第二个操作数,即减法运算的减数。
(3)指令操作的伪代码
Rd=Rd–Rm
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=NOTBorrowFrom(Rn–Rm)
VFlag=OverflowFrom(Rn–Rm)
(4)对应的ARM指令
SUBSRd>,Rn>,Rm>
评论