情報処理試験を勉強していると、「フラグレジスタって何のためにあるの?」「OF・SF・ZFって何の略?」と立ち止まりがちです。
対象試験と出題頻度
フラグレジスタは、基本情報技術者・応用情報技術者で出題されるテーマです。
CPU内部のレジスタの種類を問う問題で選択肢として登場するパターンが中心で、単独で大きく問われることは少ないものの、アセンブラ(CASL II)の午後問題では直接操作の知識が必要です。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★☆☆☆
ランクC(応用)余裕があれば覚える
フラグレジスタの定義
フラグレジスタ(Flag Register)とは、一言で言うと
「CPUが演算を実行した結果の”状態”を、ビット単位で保持するレジスタ」
のことです。ステータスレジスタ(Status Register)や条件コードレジスタ(CCR)とも呼ばれます。
イメージとしては、「計算ドリルの採点欄に付くマル・バツ・三角のスタンプ」です。
計算そのものの答えは答案用紙(アキュムレータや汎用レジスタ)に書かれます。
一方、「答えがゼロだったか」「マイナスになったか」「桁があふれたか」といった”採点結果”を記録するのがフラグレジスタです。CPUはこの採点結果を見て、次に進む道を決めます。
📊 フラグレジスタの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Flag Register(Status Register) |
| 別名 | ステータスレジスタ、条件コードレジスタ(CCR)、PSW(Program Status Word) |
| 保持する内容 | 演算結果の状態(ゼロ・負・桁あふれなど) |
| 主な用途 | 条件分岐命令の判断材料 |
| CASL IIでの構成 | OF(Overflow Flag)、SF(Sign Flag)、ZF(Zero Flag)の3ビット |
解説
CPUは命令を順番に実行しますが、プログラムには「もし結果がゼロなら処理Aへ飛ぶ」「負の値ならエラー処理に入る」といった条件分岐が必ず存在します。
この分岐判断を下すには、直前の演算結果がどんな状態だったかを知る手段が必要です。
そこで登場するのがフラグレジスタです。演算装置(ALU)が加算・減算・論理演算・シフト演算などを実行するたびに、結果の状態が自動的にフラグレジスタへ反映されます。条件分岐命令はこの値を参照して、ジャンプするかそのまま次の命令へ進むかを決定します。
代表的な3つのフラグ(OF・SF・ZF)
IPA試験で登場するCASL II(仮想計算機 COMET II)のフラグレジスタは、以下の3ビットで構成されています。
| フラグ名 | 正式名称 | 1になる条件 | 0になる条件 |
|---|---|---|---|
| OF | Overflow Flag | 演算結果が表現可能な範囲(-32768~32767)を超えた | 範囲内に収まった |
| SF | Sign Flag | 結果の最上位ビット(符号ビット)が1=負の値 | 最上位ビットが0=正の値または0 |
| ZF | Zero Flag | 結果が0(全ビットが0) | 結果が0以外 |
図解:演算からフラグ設定、条件分岐までの流れ
演算 → フラグ設定 → 条件分岐 の流れ
② 演算結果が2か所に同時セットされる
→ 汎用レジスタへ
(数値そのもの)
→ フラグレジスタへ
(ゼロか・負か・桁あふれか)
フラグレジスタ(3ビット)
(例:結果が負の値 → SF=1)
※ 演算命令のたびにフラグレジスタは自動で上書きされる
他のレジスタとの役割の違い
フラグレジスタは「演算結果の状態」だけを扱う特殊なレジスタです。他のレジスタとは保持する対象がまったく異なります。
| レジスタ | 保持する内容 | 見分けキーワード |
|---|---|---|
| フラグレジスタ | 演算結果の状態(ゼロ・負・桁あふれ) | 条件分岐、演算結果の状態 |
| プログラムカウンタ | 次に実行する命令のアドレス | 次の命令、アドレス |
| 命令レジスタ | メモリから読み出した命令そのもの | デコード、命令の保持 |
| アキュムレータ | 演算結果の数値そのもの | 演算結果、蓄積 |
| 汎用レジスタ | データやアドレスを多目的に保持 | 用途固定なし、多目的 |
ここだけは確実に押さえてください。フラグレジスタが保持するのは「数値」ではなく「状態」です。この区別が理解できていれば、レジスタ種別の選択肢問題で迷うことはありません。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 フラグレジスタの核心を3行で
・演算結果の「状態」(ゼロ・負・桁あふれ)をビットで保持するレジスタ
・CASL IIではOF(桁あふれ)・SF(符号)・ZF(ゼロ)の3ビット構成
・条件分岐命令はフラグレジスタの値を見てジャンプするか判断する
試験ではこう出る!
フラグレジスタは、FE・APの午前問題でレジスタの種類と役割を問う選択肢の中に「条件付き分岐命令を実行するために、演算結果の状態を保持する」という文言で繰り返し登場しています。単独の主題ではなく、他のレジスタ(プログラムカウンタ、命令レジスタ、スタックポインタ等)との対比で出題される点が特徴です。
📊 過去問での出題実績
| 試験回 | 出題内容 | フラグレジスタの扱い |
|---|---|---|
| FE H23秋 午前 問10 |
プログラムレジスタの役割を選ぶ問題 | 選択肢イ「条件付き分岐命令を実行するために、演算結果の状態を保持する」がステータスレジスタ(フラグレジスタ)の説明として登場 |
| AP H28春 午前 問8 |
スタックポインタが示すものを選ぶ問題 | 選択肢エ「割込みの許可状態、及び条件分岐の判断に必要な演算結果の状態」がステータスレジスタの説明として登場 |
| FE H29春 午後 問12 |
CASL IIのアセンブラ問題 | JOV命令(OFフラグによる条件分岐)でフラグレジスタの動作を直接問う出題 |
📝 IPA試験での出題パターン
パターン1:「各レジスタの役割を選べ」
プログラムカウンタ・命令レジスタ・スタックポインタなどの役割を問い、正解でない選択肢にフラグレジスタの説明が紛れ込む形式。「条件付き分岐」「演算結果の状態」というキーワードがあればフラグレジスタと判断する。
パターン2:CASL IIのアセンブラ問題(FE午後)
JOV(OFが1なら分岐)、JZE(ZFが1なら分岐)、JMI(SFが1なら分岐)といった条件分岐命令の動作をトレースする問題。各フラグの設定条件を覚えていないと解けない。
午前問題だけなら「条件分岐の判断材料=フラグレジスタ」と覚えておけば得点できます。深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. CPUにおけるフラグレジスタ(ステータスレジスタ)の役割として、最も適切なものはどれでしょうか?
- A. 次に実行すべき命令が格納されている主記憶上のアドレスを保持する。
- B. 条件付き分岐命令の判断に必要な、演算結果の状態を保持する。
- C. メモリから読み出した機械語命令を、デコードするまで一時的に保持する。
正解と解説を見る
正解:B
解説:
フラグレジスタ(ステータスレジスタ)は、演算結果がゼロか・負か・桁あふれが起きたかといった状態をビットで保持し、条件分岐命令の判断材料を提供するレジスタです。
選択肢Aはプログラムカウンタの役割です。プログラムカウンタは次の命令のアドレスを指し示すレジスタであり、演算結果の状態とは無関係です。選択肢Cは命令レジスタの役割です。命令レジスタはメモリから取り出した命令をデコーダに渡すまで保持するもので、演算の条件判定には関与しません。
よくある質問(FAQ)
Q. フラグレジスタとPSW(Program Status Word)は同じものですか?
PSWはフラグレジスタの情報に加え、割込みマスクビットやCPUの動作モード(カーネルモード/ユーザモード)などの制御情報も含む、より広い概念です。フラグレジスタはPSWの一部と考えてください。IPA試験では「ステータスレジスタ」と「フラグレジスタ」はほぼ同義で扱われますが、PSWと書かれた場合は割込み許可状態なども含む点に注意が必要です。
Q. CASL II以外の実際のCPU(x86など)にもOF・SF・ZFはありますか?
あります。x86アーキテクチャのEFLAGSレジスタにはOF・SF・ZFに加え、CF(Carry Flag:桁上がり/桁借り)やPF(Parity Flag:パリティ)など、より多くのフラグが存在します。CASL IIはこれらを3ビットに簡略化した教育用の仕様であり、実CPUのフラグレジスタはビット数も種類も多い構成です。
Q. フラグレジスタは演算命令以外でも値が変わりますか?
CASL IIの仕様では、算術演算命令(ADDA, SUBA等)、論理演算命令(AND, OR, XOR)、シフト命令(SLA, SRA, SLL, SRL)、比較命令(CPA, CPL)の実行時にフラグレジスタが設定されます。一方、ロード命令(LD)でもフラグは設定されますが、ストア命令(ST)ではフラグは変化しません。「どの命令でフラグが変わるか」はアセンブラ問題のトレースで直接影響するため、午後問題を解く人は意識しておくべきです。
Q. 「キャリーフラグ(CF)」はCASL IIに存在しますか?
CASL IIの仕様にはキャリーフラグという名称のフラグは存在しません。CASL IIでは桁あふれをOF(Overflow Flag)で表現しています。ただし、実際のCPU(x86等)ではCFとOFは別のフラグとして区別され、CFは符号なし演算の桁あふれ、OFは符号付き演算の桁あふれを検出します。IPA試験ではCASL IIの仕様に従ってOF・SF・ZFの3つを覚えておけば十分です。