EQ(等于,Equal) == Z set
NE(不等于,Not Equal) != Z clear
CS(高于或同于,进位设置,Carry Set) >= C set
CC(低于,进位清除,Carry Clear) < C clear

MI(负号,MInus) < 0 N set
PL(正号,PLus) >=0 N clear
VS(溢出设置,oVerflow Set) V set
VC(溢出清除,oVerflow Clear) V clear

HI(高于,HIgher) > C set and Z clear (unsigned higher,无符号大于)
LS(低于或同于,Lower or Same) <= C clear and Z set (unsigned lower or same,无符号小于或等于)
GE(大于等于,Greater or equal) >= N set and V set, or N clear and V clear (greater or equal,带符号大于或等于)
LT(小于,Less Than) < N set and V clear, or N clear and V set (less than,带符号小于)
GT(大于,Greater Than) > Z clear, and either N set and V set, or N clear and V clear (greater than,带符号大于)
LE(小于等于,Less or equal) <= Z set, or N set and V clear, or N clear and V set (less than or equal,带符号小于或等于)
AL(总是,Always) 永真
NV(从不,Never ) 永假

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的值通常不会改变

对于V的解释

正数相加变成负数, 以下为10进制
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 -86

负数相加变成正数
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 标志位与条件判断