平成26年春期試験午後問題 問2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問2 ハードウェア

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

 命令語の形式を,図1に示す。
pm02_1.png
 図1で使用している記号の説明を,表1に示す。
pm02_2.png
 数字の末尾に h が付いているものは16進数表記である。
  • この命令語を実行するコンピュータの1語は16ビットであり,1語長のレジスタを4個(レジスタ番号0~3)と,命令の実行結果によって値が設定される2ビットの条件コードレジスタ(以下,CCという)をもつ。
  • 実効アドレスは,表2に示す式で算出される。ここで,(x)と(b)は,それぞれ x と b で指定されるレジスタに設定されている内容(以下,レジスタの内容という)を示す。
    pm02_3.png
  • 命令コード(一部)を表3に示す。
    pm02_4.png

設問1

レジスタの内容が図2に示す値のとき,次の命令の実効アドレスとして正しい答えを,解答群の中から選べ。

 命令:  1983h
pm02_5.png
解答群
  • 0001h
  • 0002h
  • 0003h
  • 0004h
  • 0008h
  • 000Ah
解答選択欄
  •  
  •  

解説

16進数の命令を2進数に変換し、命令語の形式に当てはめると以下のようになります。
pm02a.png
まず表2「実効アドレスの算出式」とレジスタの内容に基づいて、実効アドレスを求めます。
  1. x=1 → (x)=レジスタ1の内容=3
  2. b=2 → (b)=レジスタ2の内容=2
  3. d=3
  4. 実効アドレス=3+2+3=8
算出された8を16ビットの16進表記にすると「0008h」です。

∴オ:0008h

設問2

次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,レジスタと主記憶装置の内容は,図3と図4のとおりとする。
 なお,解答は重複して選んでもよい。
pm02_6.png
 図3,4に示した状態で,主記憶装置に格納されているプログラムを 0010h 番地から実行する。
 0011h 番地の命令を実行した直後のレジスタ番号 0 の内容はaになり,レジスタ番号 1 の内容はbになる。
 0013h 番地の分岐命令ではc。0016h 番地の命令を実行した直後のレジスタ番号 2 の内容はdになる。
a,b,d に関する解答群
  • 0001h
  • 0002h
  • 0003h
  • 0004h
  • 0005h
  • 0006h
  • 0007h
  • 0008h
c に関する解答群
  • 分岐しない
  • 分岐する
解答選択欄
  • a:
  • b:
  • c:
  • d:
  • a=
  • b=
  • c=
  • d=

解説

abについて〕
まず0010h番地の命令を設問1と同様に2進数化し、各値に分解します。
pm02b.png
先に実効アドレスを算出します。
  1. x=2→(x)=レジスタ2の内容=2
  2. b=3→(b)=レジスタ3の内容=1
  3. d=0
  4. 実効アドレス=2+1+0=3=0003h
命令コード1は「rで指定されるレジスタと実効アドレスの内容の論理和をrで指定されるレジスタに格納する」命令なので、
  1. r=0→レジスタ0の内容=0004h
  2. 0003h番地の内容=0003h
  3. 0004h OR 0003h
    ↓(簡略化のために下位8ビットのみ演算)
    0100 OR 0011=0111→0007h
  4. 0007hをレジスタ0に格納する
次に0011h番地の命令です。
pm02c.png
実効アドレスを算出します。
  1. x=0
  2. b=3→(b)=レジスタ3の内容=1
  3. d=0
  4. 実効アドレス=1+0=1=0001h
命令コード2は「rで指定されるレジスタと実効アドレスの内容の論理積をrで指定されるレジスタに格納する」命令なので、
  1. r=1→レジスタ1の内容=0003h
  2. 0001h番地の内容=0001h
  3. 0003h AND 0001h
    ↓(簡略化のために下位8ビットのみ演算)
    0011 AND 0001=0001→0001h
  4. 0001hをレジスタ1に格納する
この時点でレジスタ0には0007h、レジスタ1には0001hが格納されています。

a=キ:0007h,b=ア:0001h

cについて〕
続けて0012h番地と0013h番地の命令実行の様子を考えます。
pm02d.png
[0012h番地の命令]
  1. 実効アドレス=(レジスタ3)+2→1+2=0003h
  2. レジスタ2の内容=0002h
  3. 0003h番地の内容=0003h
  4. 0002h XOR 0003h
    0010 XOR 0011=0001→0001h
  5. 0001hをレジスタ2に格納する,CC=01
[0013h番地の命令]
  1. 実効アドレス=21=10101h
  2. m と CC の論理積を求める。
    m=10,CC=01
    10 AND 01=00
結果が 00 なので分岐はしません。

c=ア:分岐しない

dについて〕
次の0014h番地の内容は以下のとおりです。
pm02_8.png
命令コードは 4 なのでCCとmの論理積を計算して分岐するかどうかを判断します。CCは0012h番地での実行結果から「01」に設定されているので、mとCCの論理積は「01」となり、実効アドレス「(010110)2=0016h」に分岐します(0015h番地は実行されない)。

続く0016h番地の内容は以下の通りです。
pm02_9.png
実効アドレスは 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

Pagetop