命令セット・アセンブリ
a0にint型(4バイト)の配列aの先頭番地、a1に添字iが入っている。上のコードがa2に読み込むものとして正しいものはどれか。
slli t0, a1, 2
add t0, a0, t0
lw a2, 0(t0)
- Aa[4*i]の値
- Ba[i]の番地
- 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の番地から読みます。