N、Z、C、V,最高 4 位称为条件码标志。ARM 的大多数指令可以条件执行的,即通过检测这些条件码标志来决定程序指令如何执行。

各个条件码的含义如下:

N:在结果是有符号的二进制补码情况下,如果结果为负数,则 N=1;如果结果为非负数,则 N=0。

Z:如果结果为 0,则 Z=1; 如果结果为非零,则 Z=0。

C:其设置分一下几种情况:

对于加法指令(包含比较指令 CMN),如果产生进位,则 C=1; 否则 C=0。

对于减法指令(包括比较指令 CMP),如果产生借位,则 C=0; 否则 C=1。

对于有移位操作的非法指令,C 为移位操作中最后移出位的值。

对于其他指令,C 通常不变。

V:对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则 V=1; 如果无溢出发生,则 V=0; 对于其他指令,V 通常不发生变化。


放在 B 指令后面的话画风看起来长这样

无符号数比较指令​

high & low

指令条件含义标志位(CPSR)数学意义
​B.HI​Branch if HigherC=1 且 Z=0无符号数 ​​大于​​(>)
​B.LS​Branch if Lower or SameC=0 或 Z=1无符号数 ​​小于等于​​(≤)
​B.HS​ B.CSBranch if Higher or Same (if carry set)C=1无符号数 ​​大于等于​​(≥)
​B.LO B.CCBranch if Lower(if carry clear)C=0无符号数 ​​小于​​(<)
​B.EQ​Branch if EqualZ=1无符号数 ​​等于​​(=)
​B.NE​Branch if Not EqualZ=0无符号数 ​​不等于​​(≠)

​有符号数比较指令对照表​

greater & less

指令条件含义标志位(CPSR)数学意义
​B.GT​Branch if GreaterZ=0 且 N=V有符号数 ​​大于​​(>)
​B.LE​Branch if Less or EqualZ=1 或 N≠V有符号数 ​​小于等于​​(≤)
​B.GE​Branch if Greater or EqualN=V有符号数 ​​大于等于​​(≥)
​B.LT​Branch if LessN≠V有符号数 ​​小于​​(<)
​B.EQ​Branch if EqualZ=1有符号数 ​​等于​​(=)
​B.NE​Branch if Not EqualZ=0有符号数 ​​不等于​​(≠)