2

私は 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 の最初の要素にメモリに格納されます。

繰り返しますが、上記は私の思考プロセスであり、おそらく間違っています

4

1 に答える 1

1

あなたの思考プロセスは正しいです、そしてそれが答えc)が正しいものである理由です。

最初の行は、$ t0 = $ s0+32addi $t0, $s0, 32を割り当てます。$ s0には配列Aの最初の要素のアドレスが含まれ、この配列の各要素が4バイトを占めることがわかっているため、$t0は配列Aの9番目の要素のアドレスA[8]を保持します( 0)。したがって、* $ t0 = address_of(A [8])*

したがって、2行目の、は、アドレス$ t0 + 0lw $t1, 0($t0)に格納されているワード(A [8])をロードし、このワードをレジスタ$t1に格納します。したがって、$ t1=8です。

3行目の、は、 $t1sw $t1, 4($t0)に含まれる単語をアドレス$t0 + 4に格納します。これは、address_of(A [9])です。したがって、A [9]=8です。

于 2012-10-17T12:23:58.697 に答える