HOME»基本情報技術者平成26年春期問題»午後問2
基本情報技術者過去問題 平成26年春期 午後問2
⇄問題文と設問を画面2分割で開く⇱問題PDF問2 ハードウェア
機械語命令に関する次の記述を読んで,設問1,2に答えよ。
命令語の形式を,図1に示す。 図1で使用している記号の説明を,表1に示す。 数字の末尾に h が付いているものは16進数表記である。
命令語の形式を,図1に示す。 図1で使用している記号の説明を,表1に示す。 数字の末尾に h が付いているものは16進数表記である。
- この命令語を実行するコンピュータの1語は16ビットであり,1語長のレジスタを4個(レジスタ番号0~3)と,命令の実行結果によって値が設定される2ビットの条件コードレジスタ(以下,CCという)をもつ。
- 実効アドレスは,表2に示す式で算出される。ここで,(x)と(b)は,それぞれ x と b で指定されるレジスタに設定されている内容(以下,レジスタの内容という)を示す。
- 命令コード(一部)を表3に示す。
設問1
レジスタの内容が図2に示す値のとき,次の命令の実効アドレスとして正しい答えを,解答群の中から選べ。
命令: 1983h
命令: 1983h
解答群
- 0001h
- 0002h
- 0003h
- 0004h
- 0008h
- 000Ah
解答選択欄
解答
- オ
解説
16進数の命令を2進数に変換し、命令語の形式に当てはめると以下のようになります。まず表2「実効アドレスの算出式」とレジスタの内容に基づいて、実効アドレスを求めます。
∴オ:0008h
- x=1 → (x)=レジスタ1の内容=3
- b=2 → (b)=レジスタ2の内容=2
- d=3
- 実効アドレス=3+2+3=8
∴オ:0008h
設問2
次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,レジスタと主記憶装置の内容は,図3と図4のとおりとする。
なお,解答は重複して選んでもよい。 図3,4に示した状態で,主記憶装置に格納されているプログラムを 0010h 番地から実行する。
0011h 番地の命令を実行した直後のレジスタ番号 0 の内容はaになり,レジスタ番号 1 の内容はbになる。
0013h 番地の分岐命令ではc。0016h 番地の命令を実行した直後のレジスタ番号 2 の内容はdになる。
なお,解答は重複して選んでもよい。 図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:
解答
- a=キ
- b=ア
- c=ア
- d=ア
解説
〔a,bについて〕
まず0010h番地の命令を設問1と同様に2進数化し、各値に分解します。先に実効アドレスを算出します。
∴a=キ:0007h,b=ア:0001h
〔cについて〕
続けて0012h番地と0013h番地の命令実行の様子を考えます。[0012h番地の命令]
∴c=ア:分岐しない
〔dについて〕
次の0014h番地の内容は以下のとおりです。命令コードは 4 なのでCCとmの論理積を計算して分岐するかどうかを判断します。CCは0012h番地での実行結果から「01」に設定されているので、mとCCの論理積は「01」となり、実効アドレス「(010110)2=0016h」に分岐します(0015h番地は実行されない)。
続く0016h番地の内容は以下の通りです。実効アドレスは b=(11)2=3 より
(b)+d=(000001)2+(000001)2=(000010)2=0002h
命令コードは 2 なので r=(10)2=2 より
0002h番地の内容 AND レジスタ2の内容
=000Fh AND 0001h
=(001111)2 AND (000001)2
=(000001)2
=0001h
がレジスタ 2 (=r) に格納されます。
∴d=ア:0001h
まず0010h番地の命令を設問1と同様に2進数化し、各値に分解します。先に実効アドレスを算出します。
- x=2→(x)=レジスタ2の内容=2
- b=3→(b)=レジスタ3の内容=1
- d=0
- 実効アドレス=2+1+0=3=0003h
- r=0→レジスタ0の内容=0004h
- 0003h番地の内容=0003h
- 0004h OR 0003h
↓(簡略化のために下位8ビットのみ演算)
0100 OR 0011=0111→0007h - 0007hをレジスタ0に格納する
- x=0
- b=3→(b)=レジスタ3の内容=1
- d=0
- 実効アドレス=1+0=1=0001h
- r=1→レジスタ1の内容=0003h
- 0001h番地の内容=0001h
- 0003h AND 0001h
↓(簡略化のために下位8ビットのみ演算)
0011 AND 0001=0001→0001h - 0001hをレジスタ1に格納する
∴a=キ:0007h,b=ア:0001h
〔cについて〕
続けて0012h番地と0013h番地の命令実行の様子を考えます。[0012h番地の命令]
- 実効アドレス=(レジスタ3)+2→1+2=0003h
- レジスタ2の内容=0002h
- 0003h番地の内容=0003h
- 0002h XOR 0003h
0010 XOR 0011=0001→0001h - 0001hをレジスタ2に格納する,CC=01
- 実効アドレス=21=10101h
- m と CC の論理積を求める。
m=10,CC=01
10 AND 01=00
∴c=ア:分岐しない
〔dについて〕
次の0014h番地の内容は以下のとおりです。命令コードは 4 なのでCCとmの論理積を計算して分岐するかどうかを判断します。CCは0012h番地での実行結果から「01」に設定されているので、mとCCの論理積は「01」となり、実効アドレス「(010110)2=0016h」に分岐します(0015h番地は実行されない)。
続く0016h番地の内容は以下の通りです。実効アドレスは b=(11)2=3 より
(b)+d=(000001)2+(000001)2=(000010)2=0002h
命令コードは 2 なので r=(10)2=2 より
0002h番地の内容 AND レジスタ2の内容
=000Fh AND 0001h
=(001111)2 AND (000001)2
=(000001)2
=0001h
がレジスタ 2 (=r) に格納されます。
∴d=ア:0001h