キャリーフラグ#
キャリーフラグ(CF レジスタ):演算結果が負であるか、または数値の上限を超える場合にトリガーされます。つまり、計算結果が範囲外になると CF フラグがトリガーされます。また、2 つの符号なし数値の差が負の場合も CF フラグがトリガーされます。
オーバーフローフラグ#
オーバーフローフラグ(OF フラグ)は CF フラグに似ていますが、符号付き数値に対して働きます。符号付き数値の計算が誤った場合に OF フラグがトリガーされます。
符号フラグ#
任意の操作の結果が負の数である場合、SF フラグがトリガーされます。SF は結果の符号を表すだけであり、結果が正しいかどうかを表すものではありません。
ゼロフラグ#
ZF は以下の条件でトリガーされます:内部的には減算の比較命令で、2 つのオペランドが同じである場合;増加または減少によって結果が 0 になる場合;減算の結果が 0 になる場合。
条件ジャンプとフラグ#
つまり、2 つのオペランドが同じ場合、JZ 命令がジャンプを実行します。最初の符号なしオペランドが 2 番目のオペランドよりも小さい場合、JB 命令がジャンプを実行します。最初の符号付きオペランドが 2 番目のオペランドよりも小さい場合、JL 命令がジャンプを実行します。通常、符号なし条件ジャンプと符号付き条件ジャンプの表の 3 番目の列だけを見れば十分です。
| asm | condition | operation |
|---|---|---|
| JA | z=0 and c=0 | jump if above(大ならジャンプ) |
| JAE | c=0 | jump if above or equal(大なるか等しいならジャンプ) |
| JB | c=1 | jump if below (小ならジャンプ) |
| JBE | z=1 or c=1 | jump if below or equal(小なるか等しいならジャンプ) |
| JC | c=1 | jump if carry(キャリーならジャンプ) |
| JECXZ | ecx=0 | jump if ecx is 0 (ecx が 0 ならジャンプ) |
| JE | z=1 | jump if equal(等しいならジャンプ) |
| JZ | z=1 | jump if zero (ゼロならジャンプ) |
| JNE | z=0 | jump if not equal (等しくないならジャンプ) |
| JNZ | z=0 | jump if not zero (ゼロでないならジャンプ) |
| JO | 範囲外 | jump if overflow |
| JP | 1 のビットが偶数個(操作結果の 2 進数表現で 1 の個数が偶数個、01110000) | jump if parity |
| JPE | 偶数パリティ | jump if parity even |
| JNP | 1 のビットが奇数個 | jump if not parity |
| JPO | 奇数パリティ | jump if parity odd |
| JS | 符号ビットが 1 | jump if sign(符号がある場合にジャンプ) |
| JNS | 符号ビットが 0 | jump if not sign(符号がない場合にジャンプ) |
| JL/JNGE | 符号ビットとオーバーフロービットが同じ | jump if less or not greater/equal |
| JLE/JNG | z=1 or 符号ビットとオーバーフロービットが同じ | jump if less or equal/not greater |
| JG/JNLE | z=0 and 符号ビットとオーバーフロービットが同じ | jump is greater/not less or equal |