命令セット・アセンブリ

a0にint型(4バイト)の配列aの先頭番地、a1に添字iが入っている。上のコードがa2に読み込むものとして正しいものはどれか。

slli t0, a1, 2
add  t0, a0, t0
lw   a2, 0(t0)
  1. Aa[4*i]の値
  2. Ba[i]の番地
  3. Ca[i]の値
答えと解説を見る

正解:C. a[i]の値

1行目でiを2ビット左にずらして4×iを作り、2行目で配列の先頭番地に足してa[i]の番地を求め、3行目でその番地から4バイトを読んでいます。int型は1要素4バイトなので、i番目の要素は先頭から4×iバイト先にあります。C言語の「a[i]」は、コンパイラによってこのような番地の計算とロードに翻訳されます。

  • A. 番地は4×iバイト先で、それがi番目の要素です。
  • B. 最後のlwで値を読んでいます。
  • C. 正しい。先頭+4×iの番地から読みます。
この分野を解く 分野ページへ

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

  1. x86の命令「add eax, [rbx]」のように、演算命令がメモリ上の値を直接使える方式について正しいものはどれか。
  2. 現在の高性能なx86のCPUが、複雑な命令を内部でどのように実行しているかの説明として正しいものはどれか。
  3. RISC-VのM拡張が基本の整数命令セットに追加する命令はどれか。
  4. RISC-VのC拡張(圧縮命令)の主な目的はどれか。
  5. M拡張のないRV32IのCPU向けに、C言語の「a * b」(int同士の掛け算)をコンパイルすると、一般にどうなるか。