命令セット・アセンブリ
RISC-V(RV32I)で「addi t0, zero, -1」を実行した後、t0に入っている32ビットの値はどれか。
- A0xFFFFFFFF
- B0x00000FFF
- C0x80000001
答えと解説を見る
正解:A. 0xFFFFFFFF
即値-1は12ビットでは0xFFFと表されます。addiはこれを32ビットに符号拡張する、つまり最上位ビットの1を上の桁すべてにコピーするので0xFFFFFFFFになり、2の補数で-1を表します。符号拡張をするおかげで、負の即値を足すだけで引き算ができます。上位をゼロで埋めると0x00000FFF=4095になり、意味が変わってしまいます。
- A. 正しい。-1が符号拡張されてすべて1になります。
- B. 符号拡張せずにゼロで埋めた場合の値です。
- C. これは符号と絶対値で表した-1で、2の補数ではありません。