命令セット・アセンブリ

リトルエンディアンのRISC-Vで、0x12345678の入ったレジスタを「sw」で番地0x100に書き込んだ。その後「lbu」で番地0x101の1バイトを読むと、値はいくらか。

  1. A0x34
  2. B0x56
  3. C0x78
答えと解説を見る

正解:B. 0x56

リトルエンディアンでは、値の下位のバイトから順に小さい番地へ置きます。0x12345678なら、0x100に0x78、0x101に0x56、0x102に0x34、0x103に0x12が入ります。したがって0x101の1バイトは0x56です。ビッグエンディアンなら0x100から0x12、0x34、…の順になり、0x101は0x34です。ネットワークやファイルの形式を扱うときは、この違いに注意が必要です。

  • A. 0x34は番地0x102に入ります。
  • B. 正しい。下位から2番目のバイトです。
  • C. 0x78は番地0x100に入ります。
この分野を解く 分野ページへ

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

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