ARM的 N、Z、C、V 标志位的解释

N  当用两个补码表示的带符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果为正数或零.
Z  Z=1表示运算的结果为零,Z=0表示运算的结果非零。
C  可以有4种方法设置C的值:
   加法运算(包括CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。
   减法运算(包括CMP):当运算时产生了借位时(无符号数溢出),C=0,否则C=1。
   对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
   对于其它的非加/减运算指令,C的值通常不会改变。
V  可以有2种方法设置V的值:
   对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
   对于其它的非加/减运算指令,V的值通常不会改变。
   
0000 = EQ - Z set (equal,相等)
0001 = NE - Z clear (not equal,不相等)
0010 = CS - C set (unsigned higher or same,无符号大于或等于)
0011 = CC - C clear (unsigned lower,无符号小于)
0100 = MI - N set (negative,负数)
0101 = PL - N clear (positive or zero,正数或零)
0110 = VS - V set (overflow,溢出)
0111 = VC - V clear (no overflow,未溢出)
1000 = HI - C set and Z clear (unsigned higher,无符号大于)
1001 = LS - C clear or Z set (unsigned lower or same,无符号小于或等于)
1010 = GE - N set and V set, or N clear and V clear (greater or equal,带符号大于或等于)
1011 = LT - N set and V clear, or N clear and V set (less than,带符号小于)
1100 = GT - Z clear, and either N set and V set, or N clear and V clear (greater than,带符号大于)
1101 = LE - Z set, or N set and V clear, or N clear and V set (less than or equal,带符号小于或等于)
1110 = AL - always
1111 = NV - never
    
对于V的解释

正数相加变成负数
1)(+72)+(+98)=?
     0 1 0 0 1 0 0 0 B    +72
  +  0 1 1 0 0 0 1 0 B    +98
     1 0 1 0 1 0 1 0 B    -42
负数相加变成正数
2)(-83)+(-80)=?
     1 0 1 0 1 1 0 1 B    -83
  +  1 0 1 1 0 0 0 0 B    -80
     0 1 0 1 1 1 0 1 B    +93
    这两个题目,按照正常的法则来运算,但结果显然不正确,这是怎么回事呢?    答案:这是因为发生了溢出。
如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是   -2n-1≤X≤2n-1-1
当n=8时,可表示的有符号数的范围为-128~+127。两个有符号数进行加法运算时,如果运算结果超出可表示的有符号数的范围时,就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同符号数相加或两个异符号数相减的情况下。
对于加法运算:
1)、如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时;
2)、或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时。
都将发生溢出。因为这两种情况是:两个正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。
对于减法运算:
1)、当次高位不需从最高位借位,但最高位却需借位(正数减负数,差超出范围);
2)、或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围)。就会出现溢出

 

 

 

 

 

  • 19
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值