命令セット・アセンブリ
RISC-Vの命令「lw t0, 8(sp)」の動作として正しいものはどれか。
- At0の値を、spに8を足した番地に4バイト書き込む
- Bspの値に8を足した番地から4バイトを読み、t0に入れる
- 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. オフセットは掛けるのではなく足します。