命令セット・アセンブリ

RISC-V(RV32I)で「addi t0, zero, -1」を実行した後、t0に入っている32ビットの値はどれか。

  1. A0xFFFFFFFF
  2. B0x00000FFF
  3. C0x80000001
答えと解説を見る

正解:A. 0xFFFFFFFF

即値-1は12ビットでは0xFFFと表されます。addiはこれを32ビットに符号拡張する、つまり最上位ビットの1を上の桁すべてにコピーするので0xFFFFFFFFになり、2の補数で-1を表します。符号拡張をするおかげで、負の即値を足すだけで引き算ができます。上位をゼロで埋めると0x00000FFF=4095になり、意味が変わってしまいます。

  • A. 正しい。-1が符号拡張されてすべて1になります。
  • B. 符号拡張せずにゼロで埋めた場合の値です。
  • C. これは符号と絶対値で表した-1で、2の補数ではありません。
この分野を解く 分野ページへ

命令セット・アセンブリのほかの問題

  1. メモリ上の1バイトに0x80が入っている。RISC-Vのlb命令とlbu命令でこのバイトを32ビットのレジスタに読み込んだときの値の組み合わせとして正しいものはどれか。
  2. 条件分岐のしくみについて、RISC-Vとx86の違いとして正しいものはどれか。
  3. RISC-Vの命令「slt t0, a0, a1」の動作として正しいものはどれか。
  4. 上のRISC-Vのコードを実行し終えたとき、t0の値はいくらか。
  5. RISC-Vの条件分岐命令(B形式)は、分岐先までの距離を13ビットの符号付きのバイト数で表し、その最下位ビットは常に0として命令に入れない。分岐命令が直接届く範囲としておよそ正しいものはどれか。