5

一部の MIPS アセンブリ命令を C コードに変換する必要があります。わかったと思いますが、直感に反するようです。何か助けはありますか?レジスタ $s0、$s1、$s2、$s3、$s4 にそれぞれ変数 f、g、h、i、j が格納されています。配列 A と B のベースは、それぞれ $s6 と $s7 に格納されます。4バイトワード。コード内のコメントは私自身のものです。

addi $t0, $s6, 4   # $t0 = A[1]
add $t1, $s6, $0   # $t1 = A[0]
sw $t1, 0($t0)     # $t0 = A[0]
lw $t0, 0($t0)     # $t0 = A[0]
add $s0, $t1, $t0  # f = A[0] + A[0]

私は間違っているように感じます。使用しないのに、なぜ最初に $t0 A[1] を作成するのですか?

4

7 に答える 7

1

以前の回答に少し追加: ストア ワードは、メモリにコピーされているため、$t1 にアクセスできなくなったことを意味します。少なくともストア ワード命令の $t1 は使用しないでください。( ) の前のものを使用する必要がありますadd $t1, $s6, $0。つまり、答えはf ( which is in $s0) = &A[0] (base address in register $t1) + A[1] (value of the array with word index 1, which is in register $t0)

于 2015-10-16T09:18:10.623 に答える
-1

これは正しいと思います。

A[1] = A[0] 
f= A[1] + A[1]
于 2013-10-15T01:54:22.637 に答える