您的位置:首页 > 其它

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

2013-03-25 10:14 190 查看
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)、或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围)。就会出现溢出

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ARM 标志位