キャリーフラグ#
キャリーフラグ(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 |