next up previous
: [問題] 符号拡張 : [付録] 数値の表現 (復習) : [問題] 正負の反転

[SPIM] 符号なし数と符号付き数の区別

上で見たように、最上位ビットが 1 である数、例えば 1010 が与えられたとき、これを 符号なし数とみなせば正の数となるし、 これを符号付き数とみなせば 負の数となる。 この区別はプログラマが意識して与えなければならない。 その例を以下の問題で見よう。

[問題]

  1. 圧縮ファイルの中の Slt.asm の中身を確認し、 実行。プログラム内でレジスタ $t0 に 1 を、 レジスタ $t1 に $-1$ を 代入している。 Windows 版 SPIM の一番上のウィンドウで、 $t0 および $t1 に何が格納されているか確かめよ。
  2. 命令「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日