私は MIPS を初めて使用し、ここで何が起こっているのか理解できません。
ワード配列 A に 0、1、2、3、4、5、6、7、8、9 がこの順序で格納されているとします。A の開始アドレスが $s0 にあるとします。次の指示の後、この配列の値は何になりますか?
addi $t0, $s0, 32
lw $t1, 0($t0)
sw $t1, 4($t0)
(a) 0,1,2,3,4,5,6,7,8,9
(b) 0,1,2,3,4,5,6,7,9,9
(c) 0,1,2,3,4,5,6,7,8,8
(d) None of the above.
答えは「c」なのですが、理由がわかりません。これが私の思考プロセスです:
コードの最初の行:
これは整数配列なので、アドレス $s0 に 32 を加えて $t0 に渡すことは、A[8] のアドレスを $t0 に渡すことになります。A[8] 各整数には 4 バイトが必要なため、$s0 に 0 を追加すると A[0] のアドレスになり、$s0 に 4 を追加すると A[1] のアドレスになります。
コードの 2 行目:
0($t0) は $t0 の最初の要素を参照しており (それが何であるかはわかりません)、それをレジスタ $t1 にロードしています。
コードの 3 行目:
$t1 のアドレスは、4($t0) で記号化される $t0 の最初の要素にメモリに格納されます。
繰り返しますが、上記は私の思考プロセスであり、おそらく間違っています