EFLAGS

読み:イーフラグス
外語:EFLAGS 英語
品詞:名詞

IA-32におけるフラグレジスタ

80286までの頃の16ビットFLAGSの上位互換で、下位16ビットはFLAGSと同じまま、32ビットに拡張された。

なお、AMD64以降では更に64ビットに拡張されRFLAGSと呼ばれている。

フラグレジスタは汎用レジスタとは異なる扱いとなっていて、操作には専用の命令が必要である。

フラグレジスタ制御のために、次の命令がある。

  • PUSHF (8086互換、EFLAGSの下位16ビットをスタックにPUSH)
  • PUSHFD (EFLAGSをスタックにPUSH)
  • POPF (8086互換、EFLAGSの下位16ビットをスタックからPOP)
  • POPFD (EFLAGSをスタックからPOP)
  • SAHF (AH→EFLAGSの下位8ビット)
  • LAHF (EFLAGSの下位8ビット→AH)
  • CLC (CF=0)
  • CLD (DF=0)
  • CLI (IF=0)
  • CMC (CF=CF)
  • STC (CF=1)
  • STD (DF=1)
  • STI (IF=1)

このほか、比較命令や条件ジャンプ命令、演算命令等により、フラグレジスタは変更ないし参照される。

全32ビット構成で、具体的なビット構成は次のとおり。

ビット名称機能
0CFキャリーフラグ
111 (未使用)
2PFパリティフラグ (演算結果の下位8ビット)
300 (未使用)
4AF補助キャリーフラグ(BCD演算用)
500 (未使用)
6ZFゼロフラグ
7SFサインフラグ
8TFトラップフラグ、トレースフラグ
9IF割り込みフラグ
10DFディレクションフラグ
11OFオーバーフローフラグ
12IOPLI/O特権レベル
13
14NTネストタスクフラグ
1500 (未使用)
16RFデバッグレジスタの命令ブレイクポイントを(1回のみ)無効にする
17VM1=仮想86モード
18AC変更可能であれば、i486Pentium以降のCPUである
19VIF仮想割り込みフラグ (Pentium以降)
20VIP仮想割り込みペンディングフラグ (Pentium以降)
21ID変更可能であれば、CPUID命令に対応している
2200 (未使用)
31