0

$ s0- $ s7、$ t0- $ t9、$ zero、$ a0- $ a3、$ v0- $ v1、$ gp、$ fp、$ ra、および$atの32x32レジスタファイルを見ています。

私の質問は、配列がこれらのレジスタファイルにどのように格納されるかです。それぞれ32ビット幅ではありませんか?

たとえば、配列Aのベースアドレスが$ s3の場合、A [8]を取得するように命令すると、次のようになります。

lw $t0, 32($s3)

どのようにデータを取得しますか?

4

1 に答える 1

1

配列へのアクセスはポインタ(Cの人々がよく知っているもの)を介して行われるため、レジスタは配列のベースアドレスを保持するだけです。次に、そのベースアドレスに8 * 4 = 32バイトを追加して、8番目の要素のアドレスを取得し、最後にそのポインターを逆参照して(つまり、そのアドレスにあるものを確認して)値を取得します(lw命令を使用)。

あなたが示した指示は、このCコードの翻訳です。

t0 = *(s3 + 8)  // same as s3[8]
于 2013-02-25T20:39:10.987 に答える