命令セット・アセンブリ

RISC-Vのauipc命令(add upper immediate to PC)の動作として正しいものはどれか。

  1. APCの値をそのままメモリに保存する
  2. B自分の番地(PC)に、20ビットの即値を12ビット左にずらした値を足してレジスタに入れる
  3. C即値で指定した番地へ無条件にジャンプし、PCを書き換える
答えと解説を見る

正解:B. 自分の番地(PC)に、20ビットの即値を12ビット左にずらした値を足してレジスタに入れる

auipcは「PC+(即値<<12)」をレジスタに入れるだけの命令です。続けてjalrやlwで下位12ビットのオフセットを足せば、今の位置から±2GiBほどの範囲にある関数やデータの番地を、PCからの距離で指定できます。これにより、プログラムをどこに読み込んでも動く位置独立コードで、遠くの関数を呼んだりグローバル変数を読んだりできます。

  • A. メモリへの保存はしません。
  • B. 正しい。PC相対の番地を作るための命令です。
  • C. auipc自体はジャンプしません。
この分野を解く 分野ページへ

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

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