本文主要是介绍刘帅嵌入式系统-RSC逆向减法指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
RSC指令从< shifter_operand > 表示的数值中减去寄存器< Rn >值,再减去寄存器CPSR中C标志位的反码,并把结果保存到目标寄存器< Rd > 中,同时根据操作的结果更新CPSR中相应的条件标志位。
指令的编码格式
指令的语法格式
RSC{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >
其中:
- < cond >、S 和Rd的用法同之前介绍的ADD传输指令。
- < Rn > 寄存器为第2个操作数所在的寄存器。
- < shifter_operand >为第1个操作数。
指令操作的伪代码
if ConditionPassed<cond> thenRd=shifter_operand - Rn - NOT(C Flag)if S==1 and Rd==R15 thenCPSR=SPSRelse if S==1 thenN Flag=Rd[31]Z Flag=if Rd==0 then 1 else 0C Flag=CarryFrom(shifter_operand - Rn - NOT(C Flag))V Flag=OverflowForm(shifter_operand - Rn - NOT(C Flag))
指令的使用
下面的指令序列可以求一个64位数值的负数。64位数放在寄存器R0与R1中,其负数放在R2与R3中。其中R0与R2中放低32位值。
RSBS R2, R0, #0
RSC R3,R1, #0 ;Rd=Rx*(2**n-1)
需要需要注意的是,在RSBS指令中,如果发生借位操作,CPSR寄存器中的C标志位设置成0;如果没有发生借位操作,CPSR寄存器中的C标志位设置成1。这与ADDS指令中的进位指令正好相反。这主要是为了适应SBC等指令的操作需要。
这篇关于刘帅嵌入式系统-RSC逆向减法指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!