問題

問8 次のプログラムの説明及びプログラムを読んで、設問1、2に答えよ。

 プログラム1及びプログラム2は、いずれも二つの整数M、Nを受け取り、その積M×Nの値を返す。積は、加減算とシフト演算を使って求める。M、N及び求めた積は、いずれも符号付き2進数の整数で、負数は2の補数で表現する。

[プログラム1の説明]

 プログラム1が受け取るM、Nは、いずれも4ビットで、各値の範囲は-8~7である。求めた積M×Nは、8ビットで返す。ただし、プログラム1中では、Mを5ビットに、Nを8ビットに拡張して処理を行う。

 Rは13ビットの作業用変数であり、最下位から順にビット番号を0,1,…とし、最上位(符号ビット)のビット番号を12とする。Rは、指定した一部の範囲(例えば、ビット番号12~8の上位5ビット)だけを符号付き2進数ちみなして部分的な算術演算ができる。また、値の検査のために指定したビット番号の内容を取り出すこともできる。

 なお、(6)の行の加算では、けたあふれが起きても無視する。(編集部注

編集部注:図中の丸付き数字は、問題文と解説文では括弧付き数字にしています。

 N=3として、M=5とM=-5の場合の処理過程を、それぞれ図1,2に示す。図1、2中の記号(1)~(8)は、プログラム1の(1)~(8)の行の処理と対応している。