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