先程のプログラム Slt.asm においてこのことを確認しよう。 この中に、「addi $t1, $zero, 」という命令がある。 これは、$t1 = 0 + (1) を実行する (すなわち $t1 = 1)。
このとき、addi は I 形式であるため、この命令を機械語によって表現すると 定数 (即値) に割り当てられるのは 16 ビットである。 16 ビットの は 2 進数では 1111 (1 が 16 個)、 16 進数では 0xffff である。
つまり、上の命令「addi $t1, $zero, 」は、 レジスタ $zero に格納されている 32 ビットの 0 と、 16 ビットの (0xffff) を足し算していることになる。 この時、シミュレータや実際のハードウェアでは 16 ビット の は 32 ビットに符号拡張されてから、32 ビットの 0 と足されるのである。
このように、符号拡張は I 形式と J 形式 (即値を含む) の
命令をハードウェアで実現する際に関係してくることがわかる。
これは教科書の第 5 章や授業の「データパス」の回において詳しく見ることになる
だろう。
[問題]