SUB dest, src 執行 dest = dest - src,**CF (Carry Flag) 反映無符號數減法的「借位」情況**:
src > dest 作為無符號數)。src <= dest)。你嘗試用 ADD dest, -src 類比 SUB,但 **CF 語義不同**:
ADD:CF = 1 表示**進位**(結果超出位寬)。SUB:CF = 1 表示**借位**(被減數不夠減)。例:mov al, 1; sub al, 2 → al = 255 (FFh),**CF = 1**(1 不夠減 2,產生借位)。
但 mov al, 1; add al, -2 (FEh) → al = 255 (FFh),**CF = 0**(無進位)。
| 標志 | 含義 | 設置條件 |
|---|---|---|
| CF | 進位/借位 | 無符號借位 (src > dest) 置 1 |
| OF | 溢出 | 有符號數溢出:符號位異常變化置 1 |
| SF | 符號 | 結果最高位 (MSB) 為 1 置 1 |
| ZF | 零 | 結果為 0 置 1 |
| AF | 輔助進位 | bit 3 向 bit 4 借位/進位置 1 (BCD 運算用) |
| PF | 奇偶 | 結果低 8 位中 1 的個數為偶數置 1 |
在調試器中觀察 EFLAGS 寄存器,對比 SUB 和 ADD 同數值運算的 CF 差異,即可直觀理解「借位 ≠ 進位」。