基本情報技術者 2011年 春期 午後 問01
機械語命令に関する次の記述を読んで、設問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進数表記である。




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


解答群
ア:100
イ:200
ウ:300
エ:400
オ:500
カ:600
模範解答
a:ア、b:エ、c:オ
解説
解答の導き方
まず、命令の動きを読むときは、命令コードで「何をするか」を確認し、レジスタ番号で「どの値を使うか」を確認します。レジスタは、CPU内で値を一時的に置いておく場所です。実効アドレスは、命令が読み書きする主記憶の番地を指します。
実行前のレジスタの内容は、図2より次のとおりです。
2042hでは、r₁が1、r₂が0です。つまり、レジスタ0の内容100をレジスタ1に設定します。ここでレジスタ1は200から100に変わります。
命令語2(10D2h)
命令コードは10hなので、ソースの値をr₁で指定されたレジスタに足し込みます。D=1、I=0なので、ソースはr₂で指定されたレジスタです。
命令コードは10hなので、ソースの値をr₁で指定されたレジスタに足し込みます。D=1、I=0なので、ソースはr₂で指定されたレジスタです。
10D2hでは、r₁が3、r₂が1です。したがって、レジスタ1の内容100をレジスタ3に足します。
この命令で変わるのはレジスタ3です。レジスタ1の内容は100のままなので、命令語2の実行後のレジスタ1は100です。
命令語3(3090h、0000h)
図3では、命令語3が番地702と番地703の2語にまたがっています。2語命令なので、番地703の0000hは命令ではなく、番地を表すadrです。
図3では、命令語3が番地702と番地703の2語にまたがっています。2語命令なので、番地703の0000hは命令ではなく、番地を表すadrです。
3090hではr₁が2、Xが1、D=0、I=0です。表2より、実効アドレスは「adr+Xで指定されたレジスタの内容」です。adrは0、レジスタ1の内容は100なので、実効アドレスは次のとおりです。
命令コードは30hで、レジスタ2の内容を実効アドレスに格納します。したがって、主記憶の番地100に、レジスタ2の内容300が格納されます。レジスタの値は変わりません。
命令語4(1013h)
命令コードは10hなので、実効アドレスに格納されている内容を、r₁で指定されたレジスタに足します。1013hではr₁が0、r₂が1、D=1、I=1です。
命令コードは10hなので、実効アドレスに格納されている内容を、r₁で指定されたレジスタに足します。1013hではr₁が0、r₂が1、D=1、I=1です。
表2によると、この場合の実効アドレスは「r₂で指定されたレジスタの内容」です。r₂はレジスタ1を指定し、その内容は100なので、実効アドレスは100です。
番地100には命令語3によって300が格納されています。よって、レジスタ0に300を足します。
命令語5(2042h)
命令語1と同じ2042hなので、レジスタ0の内容をレジスタ1に設定します。レジスタ0は命令語4の実行後に400になっているため、レジスタ1は400になります。
命令語1と同じ2042hなので、レジスタ0の内容をレジスタ1に設定します。レジスタ0は命令語4の実行後に400になっているため、レジスタ1は400になります。
命令語2で500になったレジスタ3は、命令語3〜5では書き換えられないため、500のままです。
誤りやすいポイント
- 命令語2では、レジスタ1の値をレジスタ3に足します。足される側と足す側を取り違えないようにします。
- 命令語3は2語命令です。番地703の0000hは次の命令ではなく、実効アドレスの計算に使うadrです。
- 命令語3では、レジスタ1の内容100を実効アドレスとして使います。さらに、その番地100に格納する値はレジスタ2の内容300です。
- 命令語4では、実効アドレス100と、番地100に格納されている内容300を区別します。足し算に使うのは300です。
- 命令語5はレジスタ0からレジスタ1への設定です。命令語2で変わったレジスタ3の内容には影響しません。
FAQ
Q: 命令語3で使うレジスタは、なぜr₂ではなくXで指定されるのですか?
A: 命令語3はD=0の2語命令です。図1では、2語命令のとき、ビット5〜4はr₂ではなくXとして使われます。X=1なので、指標レジスタ修飾に使うレジスタはレジスタ1です。
A: 命令語3はD=0の2語命令です。図1では、2語命令のとき、ビット5〜4はr₂ではなくXとして使われます。X=1なので、指標レジスタ修飾に使うレジスタはレジスタ1です。
Q: 命令語4では、なぜレジスタ1の内容100を足さないのですか?
A: レジスタ1の内容100は、実効アドレスを決めるために使います。命令が足すのは、その実効アドレスである番地100に格納されている内容300です。
A: レジスタ1の内容100は、実効アドレスを決めるために使います。命令が足すのは、その実効アドレスである番地100に格納されている内容300です。
Q: 命令語3の実行後、レジスタの値が変わらないのはなぜですか?
A: 命令語3はレジスタ2の内容を主記憶に格納する命令です。変更されるのは主記憶の番地100で、レジスタの内容ではありません。
A: 命令語3はレジスタ2の内容を主記憶に格納する命令です。変更されるのは主記憶の番地100で、レジスタの内容ではありません。
関連キーワード: 機械語命令、レジスタ、実効アドレス、指標レジスタ修飾、間接アドレス指定、主記憶
設問2:
問題文を見る レジスタと主記憶の内容が図4に示す値のとき、レジスタ番号1のレジスタに100を設定する命令語の記述として誤りであるものを、解答群の中から選べ。

解答群


模範解答
エ
解説
解答の導き方
この問題では、命令を実行した後にレジスタ番号1のレジスタへ100が入るかを、選択肢ごとに確認します。
表4によると、命令コード20hは、実効アドレスにある内容、またはソースレジスタにある内容を、r₁で指定されたレジスタに設定する命令です。つまり、各選択肢について「どこからデータを取り出すか」と「取り出した値はいくつか」を調べます。
- D=0のときは2語命令です。Xと2語目のadrを使って実効アドレスを求めます。
- D=1、I=0のときは、r₂で指定されたレジスタがソースレジスタです。
- D=1、I=1のときは、表2の方法で実効アドレスを求めます。
また、表2の角括弧は、レジスタまたは番地に格納されている内容を表します。たとえば、主記憶番地100の内容は101です。
図4では、レジスタ2の内容は100、レジスタ3の内容は101です。また、主記憶番地100の内容は101、主記憶番地101の内容は100です。これを使って選択肢を確認します。
エだけは、レジスタ番号1のレジスタに101が設定されます。したがって、100を設定する命令語として誤っているのはエです。
誤りやすいポイント
- D=0、I=1では、実効アドレスを求めるときに主記憶の内容を読みます。その後、命令が実効アドレスの内容を読むので、主記憶を読む段階が二度あります。
- D=1、I=1では、実効アドレスはr₂で指定されたレジスタの内容です。実効アドレスを求めるために主記憶を読むわけではありません。その後、実効アドレスにある内容を命令のデータとして読みます。
- I=1であれば、どの場合も同じ手順で主記憶を読む、とは限りません。DとIの組合せを表2で確認します。
- D=1、I=0では、実効アドレスを使わず、表3に従ってソースレジスタの内容を使います。
FAQ
Q: 「実効アドレス」とは何ですか?
A: 命令がデータを読み書きする主記憶の番地です。命令に書かれた値やレジスタの内容から求めます。
A: 命令がデータを読み書きする主記憶の番地です。命令に書かれた値やレジスタの内容から求めます。
Q: D=0、I=1では、なぜ主記憶を二度読むのですか?
A: まず、実効アドレスを求めるために、指定された番地の内容を読みます。その後、求めた実効アドレスにある内容を、命令が使うデータとして読みます。
A: まず、実効アドレスを求めるために、指定された番地の内容を読みます。その後、求めた実効アドレスにある内容を、命令が使うデータとして読みます。
Q: オもI=1ですが、なぜ実効アドレスを求めるときに主記憶を読みませんか?
A: オはD=1、I=1です。表2では、この場合の実効アドレスはr₂で指定されたレジスタの内容です。D=0、I=1の場合とは、実効アドレスの求め方が異なります。
A: オはD=1、I=1です。表2では、この場合の実効アドレスはr₂で指定されたレジスタの内容です。D=0、I=1の場合とは、実効アドレスの求め方が異なります。
関連キーワード: 命令語、実効アドレス、間接アドレス指定、指標レジスタ修飾、汎用レジスタ



