命令セット・アセンブリ

RISC-Vの命令「lw t0, 8(sp)」の動作として正しいものはどれか。

  1. At0の値を、spに8を足した番地に4バイト書き込む
  2. Bspの値に8を足した番地から4バイトを読み、t0に入れる
  3. Cspの値を8倍した番地から4バイトを読み、t0に入れる
答えと解説を見る

正解:B. spの値に8を足した番地から4バイトを読み、t0に入れる

lwはload wordの略で、32ビット(4バイト)をメモリから読み込む命令です。「8(sp)」はspの値をベースとして8を足した番地を表し、このようなアドレスの指定方法をベース相対(レジスタ間接+オフセット)と呼びます。スタック上の変数や構造体のメンバに、ベースからの決まった距離でアクセスするのに便利です。逆にレジスタの値をメモリに書くのがsw(store word)です。

  • A. 書き込みはsw命令です。
  • B. 正しい。ベースレジスタ+オフセットの番地から読みます。
  • C. オフセットは掛けるのではなく足します。
この分野を解く 分野ページへ

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

  1. RISC-Vの条件分岐命令「beq a0, a1, label」で、分岐先labelの番地はどのように表されているか。
  2. 分岐やジャンプにPC相対アドレッシングを使うことの利点として正しいものはどれか。
  3. RISC-Vの基本命令とx86の命令の長さについて正しいものはどれか。
  4. 命令の長さを固定長にすることの利点として、最も適切なものはどれか。
  5. RISC-Vの命令では、レジスタを指定する欄(rd、rs1、rs2)がそれぞれ5ビットである。その理由として正しいものはどれか。