刘帅嵌入式系统-SUB减法指令

刘帅嵌入式系统-SUB减法指令_第1张图片
SUB指令从寄存器< Rn >中减去< shifter_operand > 表示的数值,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。

指令的编码格式

刘帅嵌入式系统-SUB减法指令_第2张图片

指令的语法格式

SUB{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >

其中:

  • < cond >、S 和Rd的用法同之前介绍的MOV传输指令。
  • < Rn > 寄存器为第一个源操作数所在的寄存器。
  • < shifter_operand >为第2个操作数,其计算方法在之前已经介绍。

指令操作的伪代码

if ConditionPassed<cond> then
	Rd=Rn - shifter_operand
	if S==1 and Rd==R15 then
		CPSR=SPSR
	else if S==1 then
		N Flag=Rd[31]
		Z Flag=if Rd==0 then 1 else 0
		C Flag=CarryFrom(Rn - shifter_operand)
		V Flag=OverflowForm(Rn - shifter_operand)

指令的使用

SUB指令实现两个操作数相减。典型用法如下所示:

SUB Rx, Rx, #1		;Rx = Rx - 1

当SUBS指令与跳转指令联合使用时,可以实现程序中循环。这时就不需要CMP指令了。

需要需要注意的是,在SUBS指令中,如果发生借位操作,CPSR寄存器中的C标志位设置成0;如果没有发生借位操作,CPSR寄存器中的C标志位设置成1。这与ADDS指令中的进位指令正好相反。这主要是为了适应SBC等指令的操作需要。

你可能感兴趣的:(ARM,ARM体系结构)