标志位详解:CF/ZF/SF/OF 如何影响程序流程
FLAGS 寄存器
CPU 执行指令后,会自动更新 FLAGS 中的状态位。这些标志位决定了程序的分支走向。
核心标志位
| 标志 | 全称 | 何时置 1 | 示例 |
|:--|:--|:--|:--|
| ZF | Zero | 结果为 0 | SUB AX, AX → ZF=1 |
| CF | Carry | 无符号溢出(进位/借位) | ADD AL, 0FFh → CF=1 |
| SF | Sign | 结果为负(最高位=1) | SUB AL, 5 → SF=1 |
| OF | Overflow | 有符号溢出 | ADD AL, 7Fh, 1 → OF=1 |
条件跳转指令
跳转指令根据标志位决定走向:
| 指令 | 含义 | 检查标志 |
|:--|:--|:--|
| JE/JZ | 等于/为零 | ZF=1 |
| JNE/JNZ | 不等于/非零 | ZF=0 |
| JC | 有进位 | CF=1 |
| JNC | 无进位 | CF=0 |
| JG | 大于(有符号) | ZF=0 且 SF=OF |
| JA | 大于(无符号) | CF=0 且 ZF=0 |
实战:判断两数大小
MOV AX, 100
MOV BX, 200
CMP AX, BX ; 实际执行 AX - BX
JG GREATER ; 如果 AX > BX(有符号)
JL LESS ; 如果 AX < BX
JE EQUAL ; 如果相等
CF 与 OF 的区别
这是初学者最容易混淆的点:
总结
标志位是汇编语言的"红绿灯"。掌握它们,你才能写出有逻辑判断的程序。
下一篇:《汇编语言语法与程序格式:段定义、数据声明与伪指令》
原文链接:https://wenyiblog.top/2026/06/asm-08-flags/
首发于文艺技术笔记(wenyiblog.top),转载请注明出处。

浙公网安备 33010602011771号