本文主要是介绍刘帅嵌入式系统-CMN基于相反数的比较指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CMN指令将寄存器Rn中的值加上< shifter_operand > 表示的数值,根据操作的结果更新CPSR中相应的条件标志位,后面的指令就可以根据CPSR中相应的条件标志位来判断是否执行了。
指令的编码格式
指令的语法格式
CMN{< cond >} {S} < Rd >, < Rn> ,< shifter_operand >
其中:
-
< cond >为指令执行的条件码。当< cond >忽略是指令为无条件执行。
-
< Rn > 寄存器为第1个操作数所在的寄存器。
-
< shifter_operand >为第2个操作数。计算方法见之前介绍。
指令操作的伪代码
if ConditionPassed<cond> thenalu_out=Rn + shifter_operand N Flag=alu_out[31]Z Flag=if alu_out==0 then 1 else 0C Flag=NOT BorrowFrom(Rn + shifter_operand)V Flag=OverflowFrom(Rn + shifter_operand)
指令的使用
CMN指令将寄存器< Rn >中的值加上< shifter_operand >表示的值,根据加法操作的结果设置CPSR中相应的条件标志位。寄存器< Rn >中的值加上< shifter_operand >表示的值对CPSR中条件标志位的影响,与寄存器< Rn >中的值减去< shfter_operand >表示的数值的相反数对CPSR中条件标志位的影响有细微的差别。当第2个操作数位0或者0x80000000时,二者结果不同,例如:
CMP Rn, #0 ;C=1 CMN Rn, #0 ;C=0
这篇关于刘帅嵌入式系统-CMN基于相反数的比较指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!