コンピュータ プロセッサでは、パリティフラグは、最後の操作の結果のバイナリ表現で 設定されたビットの数が奇数か偶数かを示します。これは通常、プロセッサ ステータス レジスタ内の 1 ビットです。
たとえば、設定されたパリティ フラグが偶数パリティを示すマシンを想定します。最後の操作の結果が 26 (2 進数で 11010) の場合、設定されたビットの数が奇数なので、パリティ フラグは0になります。同様に、結果が10 (2 進数で 1010) の場合、パリティ フラグは 1 になります。
x86 プロセッサ
x86プロセッサでは、パリティ フラグは結果の最下位バイトのパリティのみを反映し、1 のセット ビットの数が偶数の場合に設定されます (言い換えると、ビットの合計が偶数の場合にパリティ ビットが設定されます) 。80386 Intelマニュアルによると、x86 プロセッサ ファミリでは、パリティ フラグは次の命令によって変更されます。
- すべての算術命令。
- 比較命令(結果を保存しない減算命令と同等)
- 論理命令 - XOR、AND、OR;
- TEST命令(結果を保存しない AND 命令と同等)。
- POPF命令
- IRET命令
- ハードウェアタスクの切り替えを引き起こす命令または割り込み
条件付きジャンプではパリティ フラグが使用されます。たとえば、パリティ フラグが設定されている場合に JP 命令は指定されたターゲットにジャンプし、パリティ フラグが設定されていない場合は JNP 命令がジャンプします。フラグは、フラグ レジスタをスタックにプッシュする PUSHF などの命令を使用して直接読み取ることもできます。
パリティフラグをテストする一般的な理由の1つは、無関係なx87-FPUフラグをチェックすることです。FPUには4つの条件フラグ(C0〜C3)がありますが、それらを直接テストすることはできず、代わりに最初にフラグレジスタにコピーする必要があります。これが発生すると、C0はキャリーフラグに、C2はパリティフラグに、C3はゼロフラグに配置されます。[1] C2フラグは、たとえば比較できない浮動小数点値(NaNまたはサポートされていない形式)がFUCOM命令と比較されるときに設定されます。
参考文献
- ^ 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル 第 1 巻: 基本アーキテクチャ」 2011 年 1 月、97 ~ 98 ページ。
