戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2014年 春期 午後 問02


機械語命令に関する次の記述を読んで、設問1,2に答えよ。

 命令語の形式を、図1に示す。
基本情報技術者試験(平成26年 午後 問2 図1)
 図1で使用している記号の説明を、表1に示す。数字の末尾にhが付いているものは16進数表記である。
基本情報技術者試験(平成26年 午後 問2 表1)
(1) この命令語を実行するコンピュータの1語は16ビットであり、1語長のレジスタを4個(レジスタ番号0〜3)と、命令の実行結果によって値が設定される2ビットの条件コードレジスタ(以下、CCという)をもつ。 (2) 実効アドレスは、表2に示す式で算出される。ここで、(x)と(b)は、それぞれxとbで指定されるレジスタに設定されている内容(以下、レジスタの内容という)を示す。
基本情報技術者試験(平成26年 午後 問2 表2)
(3) 命令コード(一部)を表3に示す。
基本情報技術者試験(平成26年 午後 問2 表3)

設問1:

問題文を見る
 レジスタの内容が図2に示す値のとき、次の命令の実効アドレスとして正しい答えを、解答群の中から選べ。
 命令:1983h
基本情報技術者試験(平成26年 午後 問2 図2)
解答群  ア:0001h  イ:0002h  ウ:0003h  エ:0004h  オ:0008h  カ:000Ah

模範解答

オ

解説

解答の導き方

命令語の形式は16ビットで、図1では、左から「op」「r又はm」「x」「b」「d」の順に分かれています。まず、命令「1983h」をこの区切りに合わせて読みます。
16進数の各桁を4ビットに直すと、1983hは次のようになります。
図1のビット位置に合わせて分けると、次のとおりです。
ビット2進数値
ビット15~120001op=1
ビット11~1010r=2
ビット9~801x=1
ビット7~610b=2
ビット5~0000011d=3
実効アドレスの計算には、表2にあるとおり、x、b、dの値を使います。今回はx=1、b=2なので、xもbも0ではありません。この場合の計算式は「(x)+(b)+d」です。
「(x)と(b)」は、xやbで指定されたレジスタの内容を表します。図2によると、レジスタ1の内容は0003h、レジスタ2の内容は0002hです。また、dの000011は3なので、アドレスの変位は0003hです。
したがって、実効アドレスは次のように求められます。
この命令では、実効アドレスは0008hになります。なお、opとrは命令の種類や対象のレジスタを示す値であり、今回の実効アドレスの計算には使いません。

誤りやすいポイント

  • 命令語を4ビットずつに区切るだけでなく、図1のビット位置に合わせて各項目に分ける必要があります。特に、dは6ビットです。
  • xとbの値は、レジスタ番号を表します。x=1、b=2は、レジスタ1とレジスタ2の内容を使うという意味です。
  • dの000011は、2進数で3を表します。レジスタの内容と足すときは、同じ数値として扱います。
  • rは実効アドレスの計算に含めません。実効アドレスは、x、b、dの組合せで表2の式を選んで求めます。

FAQ

Q: xやbが0の場合も、レジスタ0の内容を加えますか?
A: いいえ。表2では、xやbが0の場合、そのレジスタの内容は加えません。たとえばx=0、b=0なら、実効アドレスはdです。
Q: 実効アドレスとは何ですか?
A: 命令が読み書きするデータの場所を示すアドレスです。この問題では、x、b、dから計算します。
Q: opやrの値は、なぜ実効アドレスの計算に使わないのですか?
A: opは命令の種類、rは処理対象のレジスタを示すための値です。表2の実効アドレスの式には、x、b、dだけが使われています。

関連キーワード: 命令語、実効アドレス、レジスタ、16進数、アドレス指定方式

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

 次の記述中のに入れる正しい答えを、解答群の中から選べ。ここで、レジスタと主記憶装置の内容は、図3と図4のとおりとする。  なお、解答は重複して選んでもよい。
基本情報技術者試験(平成26年 午後 問2 図3, 4)
 図3、4に示した状態で、主記憶装置に格納されているプログラムを0010h番地から実行する。  0011h番地の命令を実行した直後のレジスタ番号0の内容はaになり、レジスタ番号1の内容はbになる。  0013h番地の分岐命令ではc。0016h番地の命令を実行した直後のレジスタ番号2の内容はdになる。   a, b, dに関する解答群  ア:0001h  イ:0002h  ウ:0003h  エ:0004h  オ:0005h  カ:0006h  キ:0007h  ク:0008h  ケ:0009h   cに関する解答群  ア:分岐しない  イ:分岐する

模範解答

a:キ、b:ア、c:ア、d:ア

解説

解答の導き方

この問題では、命令を順番に読み取り、レジスタや条件コードの値を更新していきます。
図1の命令語は16ビットで、上位から命令コードop、レジスタ番号rまたは分岐判定に使う値m、指標レジスタ番号x、ベースレジスタ番号b、変位dに分かれています。指標レジスタとベースレジスタは、実効アドレス(主記憶装置で実際に参照する番地)を計算するために使うレジスタです。
また、CC(Condition Code:演算結果の状態を記録する2ビットのレジスタ)は、論理演算の結果が0なら「10」、0以外なら「01」になります。分岐命令は、mとCCの論理積を計算し、その結果が「00」でなければ分岐します。
まず、図3の初期値を確認します。レジスタ番号0~3の内容は、それぞれ0004h、0003h、0002h、0001hです。
0010h番地の命令を実行します。
命令語は12C0hです。命令コードは1、rは00(レジスタ番号0)、xは10(レジスタ番号2)、bは11(レジスタ番号3)、dは0です。
xとbがどちらも0以外なので、表2より実効アドレスはレジスタ番号2の内容、レジスタ番号3の内容、dを足して求めます。
図4では、0003h番地の内容は0003hです。命令コード1は、レジスタ番号0の内容と実効アドレスにある内容の論理和を求めます。ビットごとに計算すると、0004hと0003hの論理和は0007hです。したがって、レジスタ番号0は0007hになります。結果は0以外なので、CCは「01」です。
よって、空欄aは0007hで、解答群ではキです。
0011h番地の命令を実行します。
命令語は24C0hです。命令コードは2、rは01(レジスタ番号1)、xは00、bは11(レジスタ番号3)、dは0です。
xが0、bが0以外なので、実効アドレスはレジスタ番号3の内容にdを足して求めます。
図4では、0001h番地の内容は0001hです。命令コード2は、レジスタ番号1の内容との論理積を求めます。レジスタ番号1はまだ0003hなので、0003hと0001hの論理積は0001hです。
この命令の実行後、レジスタ番号1は0001hになります。結果は0以外なので、CCは「01」です。
よって、空欄bは0001hで、解答群ではアです。
0012h番地の命令を実行します。
命令語は38C2hです。命令コードは3、rは10(レジスタ番号2)、xは00、bは11(レジスタ番号3)、dは2です。
xが0、bが0以外なので、実効アドレスは次のとおりです。
図4では、0003h番地の内容は0003hです。命令コード3は、レジスタ番号2の内容との排他的論理和(ビットが異なるとき1、同じとき0になる演算)を求めます。レジスタ番号2はまだ0002hなので、0002hと0003hの排他的論理和は0001hです。
この命令の実行後、レジスタ番号2は0001hになります。結果は0以外なので、CCは引き続き「01」です。
0013h番地の分岐命令を確認します。
命令語は4815hです。分岐判定に使うmは「10」です。現在のCCは「01」なので、mとCCの論理積は次のとおりです。
結果が「00」なので、この命令では分岐しません。空欄cは「分岐しない」で、解答群ではアです。次の0014h番地の命令に進みます。
0014h番地の分岐命令を実行します。
命令語は4C16hです。mは「11」です。分岐命令はCCを変更しないため、CCは「01」のままです。
結果が「00」ではないため、分岐します。xとbはどちらも0なので、実効アドレスはdである0016hです。したがって、0016h番地の命令に進み、0015h番地の命令は実行しません。
0016h番地の命令を実行します。
命令語は28C1hです。命令コードは2、rは10(レジスタ番号2)、xは00、bは11(レジスタ番号3)、dは1です。
実効アドレスは、レジスタ番号3の内容にdを足して求めます。
図4では、0002h番地の内容は000Fhです。レジスタ番号2は、0012h番地の命令によって0001hに更新されています。そのため、論理積は次のとおりです。
したがって、0016h番地の命令を実行した直後のレジスタ番号2の内容、つまり空欄dは0001hです。解答群ではアです。

誤りやすいポイント

  • 命令語の各部分を、16進数の桁とそのまま同じ区切りだと思わないようにします。rまたはm、x、bはそれぞれ2ビットで、dは6ビットです。
  • 実効アドレスは、xとbの値によって計算式が変わります。レジスタ番号そのものではなく、そのレジスタに設定されている内容を使います。
  • レジスタの内容は命令を実行するたびに変わります。0016h番地では、初期値ではなく0012h番地の命令で更新されたレジスタ番号2の内容を使います。
  • 分岐命令では、mとCCの論理積が「00」かどうかを確認します。0013h番地では「10」と「01」の論理積が「00」ですが、0014h番地では「11」と「01」の論理積が「01」になります。
  • 分岐命令はCCを変更しません。0013h番地で分岐しなくても、CCは「01」のまま0014h番地の判定に使われます。

FAQ

Q: 0013h番地で分岐しないのに、0016h番地の命令を実行するのはなぜですか?
A: 0013h番地では分岐せず、次の0014h番地に進みます。そこで分岐条件が成立し、0016h番地へ移動するためです。
Q: 0016h番地で使うレジスタ番号2の内容は、なぜ初期値の0002hではないのですか?
A: 0012h番地の命令でレジスタ番号2の内容が0001hに更新され、その後、0016h番地の命令まで変更されないためです。
Q: 分岐命令でCCが変わらないことは、どこから分かりますか?
A: 表3では、命令コード4のCCの設定が「—」になっています。注記のとおり、これは実行前の値が保持されるという意味です。

関連キーワード: 機械語命令、実効アドレス、指標レジスタ、ベースレジスタ、条件コード、論理演算

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

戦国ITクイズ機能

\ せっかくなら /

基本情報技術者を
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について