基本情報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 オ