: [問題] 符号拡張
: [付録] 数値の表現 (復習)
: [問題] 正負の反転
上で見たように、最上位ビットが 1 である数、例えば 1010
が与えられたとき、これを 符号なし数とみなせば正の数となるし、
これを符号付き数とみなせば 負の数となる。
この区別はプログラマが意識して与えなければならない。
その例を以下の問題で見よう。
[問題]
- 圧縮ファイルの中の Slt.asm の中身を確認し、
実行。プログラム内でレジスタ $t0 に 1 を、
レジスタ $t1 に を 代入している。
Windows 版 SPIM の一番上のウィンドウで、
$t0 および $t1 に何が格納されているか確かめよ。
- 命令「slt $t2,$t1,$t0」は、$t1 $t0 ならば $t2 に 1 を
代入し、そうでなければ $t2 に 0 を代入する。このとき、slt 命令は
$t0 と $t1 が符号付き数であると想定して動作する。
一方、命令「sltu $t3,$t1,$t0」は、
$t0 と $t1 が符号なし数であると想定して slt と同じ動作を行う。
さて、Windows 版 SPIM において $t2 と $t3 には何が代入されているか
調べよ。また、そのような結果になったはなぜか。
このように、与えられた 2 進数の意味を意識しなければならないのは、
アセンブリ言語だけではない。
C 言語においても 符号付き整数型 int と 符号なし整数型 unsigned int があり、
用途に応じて使い分けなければならない。
平成16年12月13日