您的位置:首页 > 其它

ARM的标志位解释

2016-04-11 16:25 309 查看
在学习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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: