命令セット・アセンブリ

RISC-Vで4バイトを読むlw命令の番地が4の倍数でない(境界がそろっていない)とき、起こりうることとして正しいものはどれか。

  1. A命令が自動で次の4の倍数の番地に読み替えられ、常に同じ速さで正しく読める
  2. BCPUの実装によって、例外が起きたり、ハードウェアやソフトウェアで処理されて非常に遅くなったりする
  3. C番地の下位2ビットは無視され、エラーにはならない
答えと解説を見る

正解:B. CPUの実装によって、例外が起きたり、ハードウェアやソフトウェアで処理されて非常に遅くなったりする

4バイトのデータを4の倍数の番地に置くと、1回のメモリアクセスで読めます。境界をまたぐと2回のアクセスが必要になるため、RISC-Vは境界のずれたアクセスを回路で処理するか、例外を起こしてソフトウェアに任せるかを実装に委ねています。後者だと桁違いに遅くなります。コンパイラが構造体のメンバの間に詰め物(パディング)を入れて整列するのはこのためです。

  • A. 勝手に番地を読み替えることはありません。
  • B. 正しい。ISAは実装にどちらも許しています。
  • C. 無視すると別の場所を読んでしまいます。
この分野を解く 分野ページへ

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

  1. RISC-Vの命令「slli t0, a0, 3」の結果t0は、a0の値の何倍になるか(あふれは考えない)。
  2. a0にint型(4バイト)の配列aの先頭番地、a1に添字iが入っている。上のコードがa2に読み込むものとして正しいものはどれか。
  3. x86の命令「add eax, [rbx]」のように、演算命令がメモリ上の値を直接使える方式について正しいものはどれか。
  4. 現在の高性能なx86のCPUが、複雑な命令を内部でどのように実行しているかの説明として正しいものはどれか。
  5. RISC-VのM拡張が基本の整数命令セットに追加する命令はどれか。