我在一天的时间里参加考试,如果你们能查看我的答案,我将非常感激。我必须将一小段java代码转换为MIPS指令,但没有备忘录可用,这是我第一次做这类事情。
以下是问题:
While (save[i] != k) {
save[i] = v[i];
i=i+2;
}
a)上面列出的代码是一个高级Java程序,它分配每个第二个元素 数组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'
答案 0 :(得分: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