命令セット・アセンブリ

64ビットのRV64Iでlw命令を実行すると、読み込んだ32ビットの値は64ビットのレジスタにどのように入るか。

  1. A上位32ビットは元の値のまま残り、下位32ビットだけが書き換わる
  2. B常にゼロ拡張されて64ビットになる
  3. C符号拡張されて64ビットになる(ゼロ拡張するにはlwuを使う)
答えと解説を見る

正解:C. 符号拡張されて64ビットになる(ゼロ拡張するにはlwuを使う)

RV64Iのlwは32ビットの値を符号拡張して64ビットのレジスタに入れ、符号なしで読むlwuは上位を0で埋めます。上位を前の値のまま残すと、前の値への依存が生まれてアウトオブオーダー実行の妨げになるので、RISC-Vはそうしません。32ビットの演算にはaddwなどの「w」が付いた命令があり、結果を32ビットとして計算してから符号拡張します。

  • A. RISC-Vは上位を前の値のまま残すことはしません。
  • B. ゼロ拡張はlwu命令です。
  • C. 正しい。符号付きの32ビットの値として扱います。
この分野を解く 分野ページへ

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

  1. ABI(アプリケーションバイナリインターフェース)の説明として正しいものはどれか。
  2. C言語の関数ポインタを使った呼び出し「(*fp)(x)」は、RISC-Vでは一般にどの命令で行われるか。
  3. 同じ命令セットアーキテクチャ(ISA)を採用した2つのCPUについて正しいものはどれか。
  4. RISC-Vのようなロード・ストア・アーキテクチャの特徴として正しいものはどれか。
  5. RISC-Vのレジスタx0(zero)の性質として正しいものはどれか。