基本情報 平成22年度 秋期 問22:テクノロジ系に関する問題
次の一連の 3 アドレス命令で得られる結果 x を表す式はどれか。ここで, 3 アドレ ス命令では, 三つのオペランドを用いた命令“cao b を“op(a, b,c) と して表記する。oヵ は一つの演算子を表し, 結果 x を表す式においては優先順位の高い 順に *, プ, 十, 一 とする。 グ (c, d, w1) 十 (b, w1, w2) グ (e, f, w3) ー (Ww3, g, W4) *ま (w2, w4, xx )
- ab十c/d*eグf一g
- bb十cグd*ま(eグf一g)
- c(b十cd)*eグf一g
- d(b二cグd)*(eグf一g)正答
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは d です。
3アドレス命令というのは、「材料1、材料2、計算方法、入れる場所」を一つの命令で書くやり方。順番に追っていくと、w1=c÷d、w2=b+w1、w3=e÷f、w4=w3-g、x=w2×w4 になります。これを式にすると x=(b+c÷d)×(e÷f-g) です。
👉 覚え方:途中の箱(w1, w2...)を一つずつ展開していけば、最後に式の形が見えてくる。
ほかの選択肢:a, b, c はカッコの位置や演算子が違っていて、計算手順を逆算するとズレます。
なぜこれが正解か
正解は d。3アドレス命令を順に展開する。
- 命令1: w1 = c ÷ d
- 命令2: w2 = b + w1 = b + c÷d
- 命令3: w3 = e ÷ f
- 命令4: w4 = w3 - g = e÷f - g
- 命令5: x = w2 × w4 = (b + c÷d) × (e÷f - g)
よって x = (b+c÷d)×(e÷f-g)。
各選択肢の解説
- a:演算子の優先順位だけで解釈した式で、カッコがないため命令順序を反映していない。
- b:w1=c÷d とw3=e÷f は合うが、外側のカッコの位置が誤り。
- c:(b+c×d)の部分が誤り(実際はb+c÷d)。
覚え方・ひっかけ注意
3アドレス命令は op(結果格納先, オペランド1, オペランド2) の順で書かれることもあれば op(オペランド1, オペランド2, 結果) の場合もある。問題文の表記順を必ず確認。中間変数(w1, w2...)を順に式に置き換えるのが王道。
理論的背景
3アドレス命令はコンパイラの中間表現(Intermediate Representation, IR)として代表的な形式。LLVMの中間コードやGCCのGIMPLEも本質的に3アドレス形式で、最適化(共通部分式除去・定数畳み込み・レジスタ割当)の単位として使われる。式木(AST)を後行順走査することで自動的に3アドレス命令列が生成される。
実務での使われ方
RISCアーキテクチャ(ARM、RISC-V、MIPS)は3オペランド形式(dst, src1, src2)の命令セットを採用し、CISC(x86)の2オペランド形式と対比される。3オペランド形式は元のレジスタを破壊せず保持できるため、レジスタ割当の自由度が高くパイプライン処理に向く。
試験での位置づけ
基本情報・応用情報のコンピュータアーキテクチャ分野で頻出。アドレス指定方式(即値・直接・間接・インデックス)と組み合わせて出題される。中間コード・コンパイラ最適化の話題は応用情報の言語処理プログラム分野で深掘りされる。
選択肢の発展補足
優先順位を持つ通常の中置記法から3アドレス命令への変換は、逆ポーランド記法(後置記法)を経由するのが定石。スタックマシン(JVMやCLR)は0アドレス命令(暗黙のスタックを使う)で、これと3アドレス形式の対比も頻出。中間変数のライブ範囲を解析する生存解析(liveness analysis)で最適化されるのが現代コンパイラの基本。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成22年度 秋期 問22/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。