命令セット・アセンブリ

RISC-Vで定数0x12345FFFをluiとaddiの2命令で作るとき、正しい組み合わせはどれか。

  1. Alui t0, 0x12346 の後に addi t0, t0, -1
  2. Blui t0, 0x12345 の後に addi t0, t0, 0xFFF
  3. Clui t0, 0x12345 の後に addi t0, t0, -1
答えと解説を見る

正解:A. lui t0, 0x12346 の後に addi t0, t0, -1

addiの即値は符号拡張されるので、下位12ビットが0xFFF(最上位ビットが1)のときは-1として足されます。そこでluiで作る上位を1つ大きい0x12346にしておき、0x12346000に-1を足して0x12345FFFを得ます。下位12ビットのビット11が1のときは上位に1を足しておく、というこの補正は、アセンブラやリンカが自動で行います。

  • A. 正しい。0x12346000-1=0x12345FFFです。
  • B. 12ビットの0xFFFは符号拡張されて-1として足されます。
  • C. 0x12345000-1=0x12344FFFになってしまいます。
この分野を解く 分野ページへ

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

  1. RISC-Vのauipc命令(add upper immediate to PC)の動作として正しいものはどれか。
  2. RISC-V(RV32I)で「addi t0, zero, -1」を実行した後、t0に入っている32ビットの値はどれか。
  3. メモリ上の1バイトに0x80が入っている。RISC-Vのlb命令とlbu命令でこのバイトを32ビットのレジスタに読み込んだときの値の組み合わせとして正しいものはどれか。
  4. 条件分岐のしくみについて、RISC-Vとx86の違いとして正しいものはどれか。
  5. RISC-Vの命令「slt t0, a0, a1」の動作として正しいものはどれか。