0

あと数日で試験がありますので、私の回答をチェックしていただければ幸いです。小さな Java コードを MIPS 命令に変換する必要がありますが、メモがありません。この種のことを行うのはこれが初めてです。

質問は次のとおりです。

While (save[i] != k) { 
save[i] = v[i]; 
i=i+2; 
} 

a) 上記のコードは、配列 v の各 2 番目の要素を配列 save に割り当てる高レベルの Java プログラムです。アセンブラが配列 save と v のベースアドレスをそれぞれレジスタ $s2 と $s3 に格納すると仮定すると、上記の Java プログラムをアセンブリ言語コードに変換するよう求められます。注: 明示的に指定されていない変数には、別のレジスタを自由に使用できます。

そして、ここに試みがあります:

i = $t1

k = $t2

loop:
    sll  $t3, $t1, 2     //get the offset (i*4)
    add  $t4, $t3, $s2   //t4 is the address for save[i]
    beq  $t4, $t2, exit  //check the while condition
    add  $t5, $t3, $s3   //t5 is the address for v[i]
    sw   $t4, $t5        //save[i] = v[i]
    addi $t1, 2          //inc i
    j    loop
exit:

どんな助けでも大歓迎です。

編集:「bne」を「beq」に変更

4

1 に答える 1

2

いくつかのロードが欠落しており、ストアが正しくありません:

sll  $t3, $t1, 2     //get the offset (i*4)
add  $t4, $t3, $s2   //t4 is the address for save[i]
lw   $t5,($t4)       //t5 = save[i]
beq  $t5, $t2, exit  //check the while condition
add  $t5, $t3, $s3   //t5 is the address for v[i]
lw   $t5,($t5)       //t5 = v[i]
sw   $t5, ($t4)      //save[i] = v[i]
addi $t1, 2          //inc i
于 2013-11-06T18:46:57.760 に答える