基本情報23年特別 午後 問1 設問1
【問題を解く前に】
機械語の問題
この問題を解くには
(1)まず始めに図3のプログラムを図1に基づき分解する。
このとき、始めの8バイトは、OP1種類しかはいっていないけど、
のこりの8バイトはビットごとに意味が違う。
そこで、はじめの8バイトはそのまま、後の部分だけ、2進数にしてかく。
こんなかんじになる
20 0100 0010
10 1101 0010
30 1001 0000
00 0000 0000
10 0001 0011
20 0100 0010
FF 0000 0010
(2)そしたら次に、これを、図1に示されたように分けてかく。
このときDが0だと2語命令になる。
その場合、そのあとの語も、adrにつけたす
また先頭は、番地を書いている。
こんなかんじになる。
(3)そうしたら、 OPを命令の仕様にあわせて解釈する
この際、ソースレジスタか、実行アドレスかは判断する。
ソースレジスタなら、DとIが1、0のくみあわせ。
このとき、r2で指定されたレジスタ
それ以外なら、実行アドレス計算となる。
700番地 r2(=レジスタ0)で指定された内容を
r1(=レジスタ1)に設定する
701番地 r2(=レジスタ1)で指定された内容を
r1(=レジスタ3)に足しこむ
702番地 r1(=レジスタ2)で指定された内容を
実効アドレスに格納する
実効アドレス=adr+(x(=レジスタ1)で指定された内容)
704番地 実効アドレスで指定された内容を
r1(=レジスタ0)に足しこむ
実効アドレス=r2(=レジスタ1)で指定された内容
705番地 r2(=レジスタ0)で指定された内容を
r1(=レジスタ1)に設定する
706番地 終了
【解き方】
(4)上記の命令を具体的にメモリの内容を元に実行(=手計算)してみる
図2のレジスタの内容を初期値として、以下のような表になるはず
<<参考−手計算結果>>
700番地 レジスタ0(=100)で指定された内容を
レジスタ1に設定する
→レジスタ1=100
701番地 レジスタ1(100)で指定された内容を
レジスタ3(400)に足しこむ
→レジスタ3=500
702番地
実効アドレス=adr(0)+レジスタ1(=100)=100
レジスタ2(=300)で指定された内容を
実効アドレス(100番地)に格納する
→100番地=300
704番地
実効アドレス=レジスタ1(=100)=100
実効アドレス(100番地)で指定された内容(=300)を
レジスタ0(100)に足しこむ
→レジスタ0=400
705番地 レジスタ0(=400)で指定された内容を
レジスタ1(100)に設定する
→レジスタ1=400
aについて
701の結果のレジスタ1を聞いている = 100
bについて
最後のレジスタ1の値を聞いている =400
cについて
最後のレジスタ3の値を聞いている = 500
【答え】
a ア
b エ
c オ