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

基本情報技術者 2011年 春期 午後 問01


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

 この機械語が実行されるCPUの1語は16ビットで、CPUには1語長の汎用レジスタが四つ(レジスタ番号0〜3)ある。主記憶容量は1,000語(番地0〜999)あり、命令語は700番地以降に格納される。命令語の形式は図1に示すとおりである。命令には1語命令と2語命令があり、1語命令の場合は1語目だけで構成される。
基本情報技術者試験(平成23年 午後 問1 図1)
 図1で使用している記号の説明を表1に、命令の実効アドレスの算出方法を表2に、命令の対象となるデータが設定されているレジスタ(以下、ソースレジスタという)の指定方法を表3に、命令の仕様(一部)を表4に示す。数字の末尾にhが付いているものは16進数表記である。
基本情報技術者試験(平成23年 午後 問1 表1)
基本情報技術者試験(平成23年 午後 問1 表2)
基本情報技術者試験(平成23年 午後 問1 表3)
基本情報技術者試験(平成23年 午後 問1 表4)

設問1:

問題文を見る
 次の記述中のに入れる正しい答えを、解答群の中から選べ。    命令を実行する前のレジスタの内容は、図2のとおりとする。この状態で図3のプログラムを先頭の700番地から順に実行した。  命令語2の実行が終わった時点での、レジスタ番号1のレジスタの内容はaである。命令語5の実行が終わった時点での、レジスタ番号1のレジスタの内容はbであり、レジスタ番号3のレジスタの内容はcである。
基本情報技術者試験(平成23年 午後 問1 図2)
基本情報技術者試験(平成23年 午後 問1 図3)
解答群  ア:100  イ:200  ウ:300  エ:400  オ:500  カ:600

模範解答

a:ア、b:エ、c:オ

解説

解答の導き方

まず、命令の動きを読むときは、命令コードで「何をするか」を確認し、レジスタ番号で「どの値を使うか」を確認します。レジスタは、CPU内で値を一時的に置いておく場所です。実効アドレスは、命令が読み書きする主記憶の番地を指します。
実行前のレジスタの内容は、図2より次のとおりです。
レジスタ番号内容
0100
1200
2300
3400
命令語1(2042h)
命令コードは20hなので、表4より、ソースの値をr₁で指定されたレジスタに設定する命令です。D=1、I=0なので、表3に従い、r₂で指定されたレジスタがソースになります。
2042hでは、r₁が1、r₂が0です。つまり、レジスタ0の内容100をレジスタ1に設定します。ここでレジスタ1は200から100に変わります。
命令語2(10D2h)
命令コードは10hなので、ソースの値をr₁で指定されたレジスタに足し込みます。D=1、I=0なので、ソースはr₂で指定されたレジスタです。
10D2hでは、r₁が3、r₂が1です。したがって、レジスタ1の内容100をレジスタ3に足します。
この命令で変わるのはレジスタ3です。レジスタ1の内容は100のままなので、命令語2の実行後のレジスタ1は100です。
命令語3(3090h、0000h)
図3では、命令語3が番地702と番地703の2語にまたがっています。2語命令なので、番地703の0000hは命令ではなく、番地を表すadrです。
3090hではr₁が2、Xが1、D=0、I=0です。表2より、実効アドレスは「adr+Xで指定されたレジスタの内容」です。adrは0、レジスタ1の内容は100なので、実効アドレスは次のとおりです。
命令コードは30hで、レジスタ2の内容を実効アドレスに格納します。したがって、主記憶の番地100に、レジスタ2の内容300が格納されます。レジスタの値は変わりません。
命令語4(1013h)
命令コードは10hなので、実効アドレスに格納されている内容を、r₁で指定されたレジスタに足します。1013hではr₁が0、r₂が1、D=1、I=1です。
表2によると、この場合の実効アドレスは「r₂で指定されたレジスタの内容」です。r₂はレジスタ1を指定し、その内容は100なので、実効アドレスは100です。
番地100には命令語3によって300が格納されています。よって、レジスタ0に300を足します。
命令語5(2042h)
命令語1と同じ2042hなので、レジスタ0の内容をレジスタ1に設定します。レジスタ0は命令語4の実行後に400になっているため、レジスタ1は400になります。
命令語2で500になったレジスタ3は、命令語3〜5では書き換えられないため、500のままです。
実行後レジスタ0レジスタ1レジスタ2レジスタ3
命令語1100100300400
命令語2100100300500
命令語3100100300500
命令語4400100300500
命令語5400400300500

誤りやすいポイント

  • 命令語2では、レジスタ1の値をレジスタ3に足します。足される側と足す側を取り違えないようにします。
  • 命令語3は2語命令です。番地703の0000hは次の命令ではなく、実効アドレスの計算に使うadrです。
  • 命令語3では、レジスタ1の内容100を実効アドレスとして使います。さらに、その番地100に格納する値はレジスタ2の内容300です。
  • 命令語4では、実効アドレス100と、番地100に格納されている内容300を区別します。足し算に使うのは300です。
  • 命令語5はレジスタ0からレジスタ1への設定です。命令語2で変わったレジスタ3の内容には影響しません。

FAQ

Q: 命令語3で使うレジスタは、なぜr₂ではなくXで指定されるのですか?
A: 命令語3はD=0の2語命令です。図1では、2語命令のとき、ビット5〜4はr₂ではなくXとして使われます。X=1なので、指標レジスタ修飾に使うレジスタはレジスタ1です。
Q: 命令語4では、なぜレジスタ1の内容100を足さないのですか?
A: レジスタ1の内容100は、実効アドレスを決めるために使います。命令が足すのは、その実効アドレスである番地100に格納されている内容300です。
Q: 命令語3の実行後、レジスタの値が変わらないのはなぜですか?
A: 命令語3はレジスタ2の内容を主記憶に格納する命令です。変更されるのは主記憶の番地100で、レジスタの内容ではありません。

関連キーワード: 機械語命令、レジスタ、実効アドレス、指標レジスタ修飾、間接アドレス指定、主記憶

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

この設問をAIに質問する

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

 レジスタと主記憶の内容が図4に示す値のとき、レジスタ番号1のレジスタに100を設定する命令語の記述として誤りであるものを、解答群の中から選べ。
基本情報技術者試験(平成23年 午後 問1 図4)
解答群 基本情報技術者試験(平成23年 午後 問1 設問2 解答群)

模範解答

エ

解説

解答の導き方

この問題では、命令を実行した後にレジスタ番号1のレジスタへ100が入るかを、選択肢ごとに確認します。
表4によると、命令コード20hは、実効アドレスにある内容、またはソースレジスタにある内容を、r₁で指定されたレジスタに設定する命令です。つまり、各選択肢について「どこからデータを取り出すか」と「取り出した値はいくつか」を調べます。
まず、命令語のDとIを見ます。表2と表3から、次のように読み取れます。
  • D=0のときは2語命令です。Xと2語目のadrを使って実効アドレスを求めます。
  • D=1、I=0のときは、r₂で指定されたレジスタがソースレジスタです。
  • D=1、I=1のときは、表2の方法で実効アドレスを求めます。
また、表2の角括弧は、レジスタまたは番地に格納されている内容を表します。たとえば、主記憶番地100の内容は101です。
図4では、レジスタ2の内容は100、レジスタ3の内容は101です。また、主記憶番地100の内容は101、主記憶番地101の内容は100です。これを使って選択肢を確認します。
選択肢データの取り出し方r₁に設定される値
アD=0、I=1、X=2、adr=0000hです。まず、adr+[Xで指定されたレジスタ]は、0000h+100=100です。その番地の内容は[100]=101なので、実効アドレスは101です。次に、番地101の内容を読むと100です。100
イD=1、I=0なので、表3に従ってr₂で指定されたレジスタの内容を使います。r₂は2で、レジスタ2の内容は100です。100
ウD=0、I=0、X=3、adr=0000hです。実効アドレスは、0000h+レジスタ3の内容101=101です。番地101の内容は100です。100
エD=0、I=1、X=3、adr=0000hです。まず、0000h+レジスタ3の内容101=101です。その番地の内容は[101]=100なので、実効アドレスは100です。次に、番地100の内容を読むと101です。101
オD=1、I=1、r₂=3です。表2に従うと、実効アドレスはレジスタ3の内容である101です。実効アドレスを求める段階では主記憶の内容を読みません。その後、番地101の内容を読むと100です。100
エだけは、レジスタ番号1のレジスタに101が設定されます。したがって、100を設定する命令語として誤っているのはエです。

誤りやすいポイント

  • D=0、I=1では、実効アドレスを求めるときに主記憶の内容を読みます。その後、命令が実効アドレスの内容を読むので、主記憶を読む段階が二度あります。
  • D=1、I=1では、実効アドレスはr₂で指定されたレジスタの内容です。実効アドレスを求めるために主記憶を読むわけではありません。その後、実効アドレスにある内容を命令のデータとして読みます。
  • I=1であれば、どの場合も同じ手順で主記憶を読む、とは限りません。DとIの組合せを表2で確認します。
  • D=1、I=0では、実効アドレスを使わず、表3に従ってソースレジスタの内容を使います。

FAQ

Q: 「実効アドレス」とは何ですか?
A: 命令がデータを読み書きする主記憶の番地です。命令に書かれた値やレジスタの内容から求めます。
Q: D=0、I=1では、なぜ主記憶を二度読むのですか?
A: まず、実効アドレスを求めるために、指定された番地の内容を読みます。その後、求めた実効アドレスにある内容を、命令が使うデータとして読みます。
Q: オもI=1ですが、なぜ実効アドレスを求めるときに主記憶を読みませんか?
A: オはD=1、I=1です。表2では、この場合の実効アドレスはr₂で指定されたレジスタの内容です。D=0、I=1の場合とは、実効アドレスの求め方が異なります。

関連キーワード: 命令語、実効アドレス、間接アドレス指定、指標レジスタ修飾、汎用レジスタ

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

この設問をAIに質問する

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

戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する→

すぐに利用可能!

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

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