HOME»基本情報技術者平成23年特別問題»午後問1
基本情報技術者過去問題 平成23年特別 午後問1
⇄問題文と設問を画面2分割で開く⇱問題PDF問1 ハードウェア
機械語命令に関する次の記述を読んで,設問1,2に答えよ。
この機械語が実行されるCPUの1語は16ビットで,CPUには1語長の汎用レジスタが四つ(レジスタ番号0~3)ある。主記憶容量は1,000語(番地0~999) あり,命令語は700番地以降に格納される。命令語の形式は図1に示すとおりである。命令には1語命令と2語命令があり,1語命令の場合は1語目だけで構成される。
図1で使用している記号の説明を表1に,命令の実効アドレスの算出方法を表2に,命令の対象となるデータが設定されているレジスタ(以下,ソースレジスタという)の指定方法を表3に,命令の仕様(一部)を表4に示す。数字の末尾にhが付いているものは16進数表記である。
この機械語が実行されるCPUの1語は16ビットで,CPUには1語長の汎用レジスタが四つ(レジスタ番号0~3)ある。主記憶容量は1,000語(番地0~999) あり,命令語は700番地以降に格納される。命令語の形式は図1に示すとおりである。命令には1語命令と2語命令があり,1語命令の場合は1語目だけで構成される。


設問1
次の記述中の に入れる正しい答えを,解答群の中から選べ。
命令を実行する前のレジスタの内容は,図2のとおりとする。この状態で図3のプログラムを先頭の700番地から順に実行した。
命令語2の実行が終わった時点での,レジスタ番号1のレジスタの内容はaである。命令語5の実行が終わった時点での,レジスタ番号1のレジスタの内容はbであり,レジスタ番号3のレジスタの内容はcである。
命令を実行する前のレジスタの内容は,図2のとおりとする。この状態で図3のプログラムを先頭の700番地から順に実行した。
命令語2の実行が終わった時点での,レジスタ番号1のレジスタの内容はaである。命令語5の実行が終わった時点での,レジスタ番号1のレジスタの内容はbであり,レジスタ番号3のレジスタの内容はcである。

a,b,c に関する解答群
- 100
- 200
- 300
- 400
- 500
- 600
解答選択欄
- a:
- b:
- c:
解答
- a=ア
- b=エ
- c=オ
解説
プログラムをトレースする前に、16ビットで構成される機械語の1語について確認しておきましょう。
上位8ビットが命令コード、下位8ビットがデータ部です。
この問題を解く基本的な流れとしては、各命令ごとに
それでは、ここから命令ごとに内容を確認していきましょう。なお問題問題文中にも注記がありますが、命令文の最後尾に付加されている"h"は、数字が16進表記であることを示す記号です。
初期状態のレジスタの内容は以下の通りです。
[命令語12042h]
16進表記である命令の中で、上2けたは変換しなくてもそのまま命令コードを表しているので、2進数に変換するのはデータ部だけで済みます。この命令"2042h"では"20"の部分が命令コードを表します。
処理の結果、レジスタ番号1の内容は"100"になります。
[命令語210D2h]
処理の結果、レジスタ番号3の内容は"500"になります。
∴a=ア:100[命令語33090h、0000h]
処理の結果、主記憶の100番地に"300"が格納されます。
[命令語41013h]
処理の結果、レジスタ番号0の内容は"400"になります。
[命令語52042h]
処理の結果、レジスタ番号1の内容は"400"になります。
∴b=エ:400
c=オ:500
[命令語6FF02h]
命令コードが、プログラム終了を実行する"FFh"となるためプログラムはここで終了します。

この問題を解く基本的な流れとしては、各命令ごとに
- 命令の内容を2進数に変換する
- 2つのレジスタ番号(r1、r2()またはX)と、2つのフラグ(D、I)の値を確認する
- 表2、表3をもとに実行アドレスの算出、またはソースレジスタを確認する
- 命令コードを確認し、処理内容をレジスタに反映する
それでは、ここから命令ごとに内容を確認していきましょう。なお問題問題文中にも注記がありますが、命令文の最後尾に付加されている"h"は、数字が16進表記であることを示す記号です。
初期状態のレジスタの内容は以下の通りです。

16進表記である命令の中で、上2けたは変換しなくてもそのまま命令コードを表しているので、2進数に変換するのはデータ部だけで済みます。この命令"2042h"では"20"の部分が命令コードを表します。
- データ部を2進数に変換42h→01000010
- 2進数のデータ部から各値を確認 r1=1、r2=0、D=1、I=0
- 表3より、D=1、I=0なので、r2で指定されたレジスタがソースレジスタとなる。
処理の結果、レジスタ番号1の内容は"100"になります。

- データ部を2進数に変換D2h→11010010
- 2進数のデータ部から各値を確認 r1=3、r2=1、D=1、I=0
- 表3より、D=1、I=0なので、r2で指定されたレジスタがソースレジスタとなる。
処理の結果、レジスタ番号3の内容は"500"になります。

- 1語目のデータ部を2進数に変換 90h→10010000
- 2進数のデータ部から各値を確認 r1=2、X=1、D=0、I=0
- 表2より、D=0、I=0なので、実効アドレスは、adr+[Xで指定されたレジスタ]となる。
- adr=0(2語目の内容)、X=1なので、実効アドレスは、
adr+[Xで指定されたレジスタ]=0+[レジスタ番号1]=0+100=100
と算出される。
処理の結果、主記憶の100番地に"300"が格納されます。

- データ部を2進数に変換13h→00010011
- 2進数のデータ部から各値を確認 r1=0、r2=1、D=1、I=1
- 表2より、D=1、I=1なので、実効アドレスは、adr+[r2で指定されたレジスタ]となる。
- 実効アドレスは、
[r2で指定されたレジスタ]=[レジスタ番号1]=100
と算出される。
処理の結果、レジスタ番号0の内容は"400"になります。

- データ部を2進数に変換42h→01000010
- 2進数のデータ部から各値を確認 r1=1、r2=0、D=1、I=0
- 表2より、D=1、I=0なので、r2で指定されたレジスタがソースレジスタとなる。
処理の結果、レジスタ番号1の内容は"400"になります。

c=オ:500
[命令語6FF02h]
命令コードが、プログラム終了を実行する"FFh"となるためプログラムはここで終了します。
設問2
レジスタと主記憶の内容が図4に示す値のとき,レジスタ番号1のレジスタに100を設定する命令語の記述として誤りであるものを,解答群の中から選べ。

解答群

解答選択欄
解答
- エ
解説
opとr1は同じなので、各命令語で実効アドレス、またはソースレジスタの内容が"100"になっていれば、20h命令によりレジスタ番号1に"100"が設定されます。つまり実効アドレス、またはソースレジスタの内容を確認していくことで誤っている命令語がわかります。
- D=0、I=1なので、実効アドレスは[adr+[Xで指定されたレジスタ]]で算出します。
X=2、adr=0なので、実効アドレスは [0+[レジスタ番号2]]=[0+100]=[100]=101
r1にセットされるのは、主記憶101番地の内容"100"になります。 - >D=1、I=0なので、r2で指定されたレジスタがソースレジスタになります。
r2=2なので、ソースレジスタはレジスタ番号2となり、その内容は100です。 - D=0、I=0なので、実効アドレスはadr+[Xで指定されたレジスタ]で算出します。
X=3、adr=0なので、実効アドレスは0+[レジスタ番号3]=0+101=101
r1にセットされるのは、主記憶101番地の内容"100"になります。 - D=0、I=1なので、実効アドレスは[adr+[Xで指定されたレジスタ]]で算出します。
X=3、adr=0なので、実効アドレスは [0+[レジスタ番号3]]=[0+101]=[101]=100
r1にセットされるのは、主記憶100番地の内容"101"になるため、これが正解です。 - D=1、I=1なので、実効アドレスは[r2で指定されたレジスタ]で算出します。
X=3なので、実効アドレスは [レジスタ番号3]=101
r1にセットされるのは、主記憶101番地の内容"100"になります。