命令セット・アセンブリ
RISC-Vで4バイトを読むlw命令の番地が4の倍数でない(境界がそろっていない)とき、起こりうることとして正しいものはどれか。
- A命令が自動で次の4の倍数の番地に読み替えられ、常に同じ速さで正しく読める
- BCPUの実装によって、例外が起きたり、ハードウェアやソフトウェアで処理されて非常に遅くなったりする
- C番地の下位2ビットは無視され、エラーにはならない
答えと解説を見る
正解:B. CPUの実装によって、例外が起きたり、ハードウェアやソフトウェアで処理されて非常に遅くなったりする
4バイトのデータを4の倍数の番地に置くと、1回のメモリアクセスで読めます。境界をまたぐと2回のアクセスが必要になるため、RISC-Vは境界のずれたアクセスを回路で処理するか、例外を起こしてソフトウェアに任せるかを実装に委ねています。後者だと桁違いに遅くなります。コンパイラが構造体のメンバの間に詰め物(パディング)を入れて整列するのはこのためです。
- A. 勝手に番地を読み替えることはありません。
- B. 正しい。ISAは実装にどちらも許しています。
- C. 無視すると別の場所を読んでしまいます。