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