Thumb指令集之:Thumb数据处理指令
。详见指令操作伪代码。 (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> (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> (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> (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> (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> (1)编码格式 减法指令SUB(4)的编码格式如图11.40所示。 图11.40SUB(4)指令的编码格式 SUB(4)指令从堆栈指针SP中减去7位立即数的4倍,也就是说其取值为在0~508范围内4的倍数。 (2)指令的语法格式 SUBSP,#immed_7>×4 ①SP 程序的堆栈指针,同时也为指令的目的寄存器,存放指令的运算结果。 ②immed_7> 7位立即数,其值的4倍将作为减数参加运算。 (3)指令操作的伪代码 SP=SP–(immed_72) 注意 在Thumb指令集中,使用满递减堆栈,该指令常被用于元素的入栈操作。 (4)对应的ARM指令 SUBSP,SP,#immed_7>*4 (1)编码格式 位测试指令TST的编码格式如图11.41所示。 图11.41TST指令的编码格式 TST指令将两个寄存器的值按位做逻辑与操作,并根据指令的执行结果更新CPSR中相应的条件标志位。TST指令常被用于测试寄存器中某一位11.4.30带进位的减指令SBC
11.4.31减法指令SUB(1)
11.4.32减法指令SUB(2)
11.4.33减法指令SUB(3)
11.4.34减法指令SUB(4)
11.4.35位测试指令TST
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)