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 |
实战:判断两数大小
|
|
CF 与 OF 的区别
这是初学者最容易混淆的点:
- CF 关注无符号数:
0FFh + 1 = 100h→ 进位了,CF=1 - OF 关注有符号数:
7Fh + 1 = 80h→ 从 +127 变成 -128,溢出了,OF=1
总结
标志位是汇编语言的"红绿灯"。掌握它们,你才能写出有逻辑判断的程序。
下一篇:《汇编语言语法与程序格式:段定义、数据声明与伪指令》