从Java到MIPS的转换

从Java到MIPS的转换,java,assembly,mips,Java,Assembly,Mips,我还有几天要考试,如果你们能查一下我的答案,我将不胜感激。我必须将一小段java代码转换成MIPS指令,但是没有可用的备忘录,这是我第一次做这种事情 问题是: While (save[i] != k) { save[i] = v[i]; i=i+2; } a) 上面列出的代码是一个高级Java程序,它分配 将数组v保存到数组中。假设汇编程序存储 数组将和v分别保存到寄存器$s2和$s3中,要求您转换 上面的Java程序转换成汇编语言代码。 注意:对于未指定的变量,您可以自由使用不同的寄

我还有几天要考试,如果你们能查一下我的答案,我将不胜感激。我必须将一小段java代码转换成MIPS指令,但是没有可用的备忘录,这是我第一次做这种事情

问题是:

While (save[i] != k) { 
save[i] = v[i]; 
i=i+2; 
} 
a) 上面列出的代码是一个高级Java程序,它分配 将数组v保存到数组中。假设汇编程序存储 数组将和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

这里有很多很多“C到mips”的问题。查一查。“Java到mips”有点伤脑筋。你可能会在代码复查中得到更好的答案-