next up previous
: [付録] 加算・減算および論理演算 (復習) : [付録] 数値の表現 (復習) : [問題] 符号拡張

[SPIM] 符号拡張 (SPIM における例)

符号拡張はハードウェア中で頻繁に行われている。

先程のプログラム Slt.asm においてこのことを確認しよう。 この中に、「addi $t1, $zero, $-1$」という命令がある。 これは、$t1 = 0 + ($-$1) を実行する (すなわち $t1 = $-$1)。

このとき、addi は I 形式であるため、この命令を機械語によって表現すると 定数 (即値) に割り当てられるのは 16 ビットである。 16 ビットの $-1$ は 2 進数では 11$\cdots$11 (1 が 16 個)、 16 進数では 0xffff である。

つまり、上の命令「addi $t1, $zero, $-1$」は、 レジスタ $zero に格納されている 32 ビットの 0 と、 16 ビットの $-1$ (0xffff) を足し算していることになる。 この時、シミュレータや実際のハードウェアでは 16 ビット の $-1$ は 32 ビットに符号拡張されてから、32 ビットの 0 と足されるのである。

このように、符号拡張は I 形式と J 形式 (即値を含む) の 命令をハードウェアで実現する際に関係してくることがわかる。 これは教科書の第 5 章や授業の「データパス」の回において詳しく見ることになる だろう。

[問題]

  1. Slt.asm を実行した時のレジスタ $t1 の値をシミュレータで確認し、 符号拡張が行われたのを確かめよ。


平成16年12月13日