ARM的标志位解释

来源:互联网 发布:46倍奔驰宝马数学算法 编辑:程序博客网 时间:2024/05/08 09:39

在学习ARM指令这一章节时,我对下面这张条件吗表一开始不理解:

之前以为CMP指令执行后,不管是进位还是借位,C标志位都会置位,其实这是错的,所以我整理了一下四个ARM标志位的置位和清零的规则:

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
     






0 0
原创粉丝点击