我会在几天内进行一次考试,如果你们能检查我的答案,我将不胜感激。我必须将一小段Java代码转换为MIPS指令,但是没有可用的备忘,这是我第一次做这种事情。

这是问题:

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


a)上面列出的代码是一个高级Java程序,它分配了
数组v到数组保存。假设汇编器存储了基址
将数组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”

最佳答案

您缺少一些负载,并且您的商店不正确:

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

10-06 10:22