新闻中心

EEPW首页>嵌入式系统>设计应用> ARM处理器CPSR标志位和条件符之间的关系

ARM处理器CPSR标志位和条件符之间的关系

作者: 时间:2012-12-08 来源:网络 收藏

  应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。

  判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出;其他情况下,则不会产生溢出。

  代码举例1:

  LDR r0, =0x7fffffff

  LDR r1, =0x70000000;

  ADDS r0, r0, r1; //结果=0xefffffff

  对于无符号数运算来说,没有进位。

  对于有符号数运算来说,溢出。

  此时C=0 V=1;

  代码举例2:

  LDR r0, =0xffffffff

  LDR r1, =0x70000000;

  ADDS r0, r0, r1; //结果=0x6fffffff

  对于无符号数运算来说,有进位。

  对于有符号数运算来说,无溢出。

  此时C=1 V=0;

  代码举例3:

  LDR r0, =0x8fffffff

  LDR r1, =0xf0000000 ;

  ADDS r0, r0, r1; //结果=0x7fffffff

  此时C=? V=?;(思考一下,然后在ARM模拟器中验证下)

  代码举例4://思考减法时,C值的影响

  LDR r0, =0x3

  LDR r1, =0x2

  SUBS r0, r0, r1

  对比:

  LDR r0, =0x3

  LDR r1, =-2;(-2的补码0xfffffffe会送到r1)

  ADDS r0, r0, r1

  四、CPSR状态标志和ARM指令的之间的关系

  有了上面的背景知识以后,接下来思考表1中CPSR状态标志和ARM指令的之间的关系,下面选取其中的一项来分析。

  如:GE:(有符号数大于等于)

  N=0 V=0:结果是大于等于0的数,且无符合溢出,所以大于等于关系成立

  N=1 V=1:结果小于0,但有符号溢出

  考虑以下情况:c=a-b

  1.a0, b0

  减法操作时不可能符号溢出

  2.a>0, b0

  可能出现N=V=1?? 如(8位数):100-(-100)=200

  显然a>b

  3.a0, b>0

  参照上面提到过的判断溢出标志的简单规则,可以得出:在此情况下,

  减法操作时如果结果小于0 (N=1),则不会出现符号溢出

  所以(在N=1 V=1前提下a0,b>0)这种情况不可能出现

  4.a>0, b>0

  减法操作不可能出现符号溢出。

  其它项的分析过程类似。

  五、总结

  尽管以上分析看起来有点复杂,但使用时在大多数情况下用一个简单的条件测试指令即可,不需要程序员计算出条件码的精确值即可得到需要的结果。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭