マイクロプロセッサ演習第八回解答
- [問題] 加算器
論理回路の復習なので省略します。
- [問題] ALU
加算のとき C=0、減算のとき C=1。X+Y において、Y にビット反転を施し、1 を足すと X+ (-Y) になる。(符号反転に注意)
- [問題] 符号なし数の乗算
(a) 乗数0=1 なら被乗数を積レジスタにに加え結果を積レジスタに収める。乗数0=0 なら何もしない
(b) 被乗数レジスタを 1 ビット左にシフト
(c) 乗数レジスタを 1 ビット右にシフト
- [問題] 符号付き数の乗算
(1) 0011×1110
1110 は負の数なので、正の数に反転すると 0010。
0011×0010 = 0000 0110 である。これをさらに符号反転して 1111 1010 (=-6)。
(2) 1110×1110
1110 は負の数なので、正の数に反転すると 0010。
0010×0010 = 0000 0100 (=4) であり、これが答えとなる。
- [問題] 符号なし数の除算
(a) 剰余レジスタから除数レジスタを引いて結果を剰余レジスタに収める
(b) 剰余>=0 なら商レジスタを左にシフトし、右端の新しいビットに 1 を設定する。
剰余<0 なら剰余レジスタに除数レジスタを加えて値を元に戻し、結果を剰余レジスタに収める。そして商レジスタを左にシフトし、右端の新しいビットに 0 を設定する。
(c) 除数レジスタを 1 ビット右にシフト
- [SPIM] MIPS における乗算と除算
まず、
li $t0, 7
li $t1, 2 (問題によっては li $t1, -2)
などによって値を $t0 と $t1 にあらかじめ格納しておく。
符号つき乗算に対応する命令は以下の通り。
mult $t0, $t1
符号つき除算に対応する命令は以下の通り。
div $t0, $t1
符号つき演算に対して、Hi レジスタと Low レジスタは以下のようになる。
7×2
Hi: 0000 0000
Lo: 0000 000e
7×(-2)
Hi: ffff ffff
Lo: ffff fff2
7÷2
Hi: 0000 0001
Lo: 0000 0003
7÷(-2)
Hi: 0000 0001
Lo: ffff fffd
興味のある人は符号なし演算も試してみて下さい。
- [SPIM] 浮動小数点表現
-0.75 = -(0.5 + 0.25) = -(1/2 + 1/4) = -0.11 (2) = -1.1 × 2-1
に注意すると、
1 0111 1110 100…00 (最後の 0 は 22 個)となる。
付録の解答については省略します。分からなかった人は質問して下さい。
マイクロプロセッサ演習のページへ戻る