2011-08-10 9 views
1

私はこの宿題を解決しようとしていましたが、解決策を考え出すことができませんでした。以下は問題ですMIPSからCへの翻訳の問題

次のMIPSコードを高レベルの言語プログラムに翻訳してください。 $ t0、$ t1、$ t2に配列A、Bのベースアドレスがそれぞれ とCであるとします。

add $t4, $zero, $zero 
Loop: 
add $t5, $t4, $t1 
lw $t6, 0($t5) 
add $t5, $t4, $t2 
lw $t7, 0($t5) 
add $t6, $t6, $t7 
add $t5, $t4, $t0 
sw $t6, 0($t5) 
addi $t4, $t4, 4 
slti $t5, $t4, 256 
bne $t5, $zero, Loop 
Also find the decimal value in the offset field of bne 

命令。

これは私が試したものですが、まだ256の位置は見つかりません。

int *temp4 = 0; 
while(1) 
{ 
    *int temp5 = temp4 +B[0]; 
    a: 
     *int temp6 = temp5; 
     temp5 = C[0] + temp4; 
     *temp7 = temp5; 
     temp6 = temp6 + temp7; 
     temp5 = temp4 + A[0]; 
     temp6 = temp5; 
     temp4 += 4; 
     if(temp5 < temp4) 
      goto __; 
     if(temp5 != 0) 
      goto a; 
} 

答えて

4

あなたはあなたのことを考えすぎていると思います。そのコードが何

この が見えますので、 のようにたくさんの宿題がある理由を、説明するつもりはない、この

for (int i =0 ; i< 64; i++){ 

    A[i] = B[i] + C[i]; 

} 

のようなものです。ここで

は、私が試したものですが、私はまだあなたが物事を混合している256

の位置を見つけることができません。 sltiの末尾にあるiを参照してください。つまり、中間のオペランドを使用します(この場合は256)。したがってslti $t5, $t4, 256命令が実行しているのは、$t4の内容が256より小さい場合は、$t5のレジスタに1を設定しています。それ以外の場合は、$t50になります。

bneの内容は、$t4の内容が256より大きい場合にのみフォールスルー(つまりジャンプしない)になるため、ループは256/4回の反復回数を要します。

+0

ステートメントでは、$ t5、$ t4、$ t1を追加します。t1は値に初期化されません。あなたはそれが何を保持するだろうか詳しく教えてもらえますか? –

+0

'$ t1'は配列Bのベースアドレスを含んでいます。その前提です。 mipsでは、 'la $ t1、arrayB'のように簡単です – Tom