Thumb指令集之:Thumb数据处理指令
11.4.28逻辑或指令ORR
(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>
11.4.29循环右移指令ROR
(1)编码格式
循环右移指令ROR的编码格式如图11.35所示。
图11.35ROR指令的编码格式
ROR指令将一个给定寄存器的值循环右移一定的位数。并根据指令的操作结果更新状态寄存器的条件标志位。详见指令操作伪代码。
(2)指令的语法格式
RORRd>,Rs>
①Rd>
目的寄存器。存储指令的操作结果和被移位的数值。
②Rs>
循环左移的位数。
(3)指令操作的伪代码
ifRs[7:0]==0then
CFlag=unaffected
Rd=unaffected
ElseifRs[4:0]==0then
CFlag=Rd[31]
Rd=unaffected
Else/*Rs[4:0]>0*/
CFlag=Rd[Rs[4:0]-1]
Rd=RdRotate_RightRs[4:0]
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
VFlag=unaffected
(4)对应的ARM指令
MOVSRd>,Rd>,RORRs>
11.4.30带进位的减指令SBC
(1)编码格式
带进位的减指令SBC的编码格式如图11.36所示。
图11.36SBC指令的编码格式
SBC指令从指定寄存器中减去另一个寄存器的数值,再减去寄存器CPSR中C条件标志位的反码,并把结果保存到目标寄存器中,同时根据操作的结果更新CPSR中相应的条件标志位。
(2)指令的语法格式
SBCRd>,Rm>
①Rd>
被减数寄存器,同时保存指令的操作结果。
②Rm>
减数寄存器,保存减法操作的减数。
(3)指令操作的伪代码
Rd=Rd–Rm–NOT(CFlag)
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=NOTBorrowFrom(Rd–Rm–NOT(CFlag))
VFlag=OverflowFrom(Rd–Rm–NOT(CFlag))
(4)对应的ARM指令
SBCSRd>,Rd>,Rm>
评论