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 Higher | C=1 且 Z=0 | 无符号数 大于(>) |
B.LS | Branch if Lower or Same | C=0 或 Z=1 | 无符号数 小于等于(≤) |
B.HS B.CS | Branch if Higher or Same (if carry set) | C=1 | 无符号数 大于等于(≥) |
B.LO B.CC | Branch if Lower(if carry clear) | C=0 | 无符号数 小于(<) |
B.EQ | Branch if Equal | Z=1 | 无符号数 等于(=) |
B.NE | Branch if Not Equal | Z=0 | 无符号数 不等于(≠) |
有符号数比较指令对照表
greater & less
指令 | 条件含义 | 标志位(CPSR) | 数学意义 |
---|---|---|---|
B.GT | Branch if Greater | Z=0 且 N=V | 有符号数 大于(>) |
B.LE | Branch if Less or Equal | Z=1 或 N≠V | 有符号数 小于等于(≤) |
B.GE | Branch if Greater or Equal | N=V | 有符号数 大于等于(≥) |
B.LT | Branch if Less | N≠V | 有符号数 小于(<) |
B.EQ | Branch if Equal | Z=1 | 有符号数 等于(=) |
B.NE | Branch if Not Equal | Z=0 | 有符号数 不等于(≠) |