命令セット・アセンブリ
64ビットのRV64Iでlw命令を実行すると、読み込んだ32ビットの値は64ビットのレジスタにどのように入るか。
- A上位32ビットは元の値のまま残り、下位32ビットだけが書き換わる
- B常にゼロ拡張されて64ビットになる
- 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ビットの値として扱います。