进位标志#
进位标志(Carry Flag):当运算结果为负或者相加超过数值上限的时候会被触发。大概意思是计算结果如果超出了范围,就会触发 CF 标志,如果两个无符号数相减结果为负,同样会触发 CF 标志。
溢出标志#
溢出标志(Overflow Flag)类似于进位标志,但它针对有符号数的,当有符号数计算出错时,会触发 OF 标志位。
符号标志#
任何操作的结果如果是一个负数就会触发 SF,SF 只表示结果的符号,并不表示结果对还是错。
零标志#
ZF 在以下条件下将会触发:在内部实际是减法的比较指令中,两个操作数相同;增或减导致结果为 0;相减结果为 0。
条件跳转与标志位#
也就是当 2 个操作数相同,JZ 指令会执行跳转。如果第一个无符号操作数比第二个小,JB 指令会执行跳转。如果第一个有符号操作数比第二个小,JL 指令会执行跳转。一般只需要看无符号条件跳转和有符号条件跳转表格的第三列就行。
asm | 条件 | 操作 |
---|---|---|
JA | z=0 and c=0 | 如果大于则跳转 |
JAE | c=0 | 如果大于或等于则跳转 |
JB | c=1 | 如果低于则跳转 |
JBE | z=1 or c=1 | 如果小于等于则跳转 |
JC | c=1 | 如果进位则跳转 |
JECXZ | ecx=0 | 如果 ecx 为 0,则跳转 |
JE | z=1 | 如果相等就跳转 |
JZ | z=1 | 如果为零则跳转 |
JNE | z=0 | 如果不相等就跳转 |
JNZ | z=0 | 如果非零则跳转 |
JO | 超出范围 | 如果溢出则跳转 |
JP | 有偶数个 1 位(操作结果中二进制中 1 的个数,01110000) | 如果偶数校验则跳转 |
JPE | 偶数校验 | 如果偶数校验则跳转 |
JNP | 没有偶数个 1 位 | 如果不是偶数校验则跳转 |
JPO | 奇数校验 | 如果奇数校验则跳转 |
JS | 符号位为 1 | 如果有标志则跳转 |
JNS | 符号位为 0 | 如果没有标志则跳转 |
JL/JNGE | 符号位与溢出位相同 | 如果小于或不大于 / 等于则跳转 |
JLE/JNG | z=1 or 符号位与溢出位相同 | 如果小于或等于 / 不大于则跳转 |
JG/JNLE | z=0 and 符号位与溢出位相同 | 如果大于 / 不小于或等于则跳转 |