MIPS,处理数组和列表(将Java代码转换为MIPS)

MIPS,处理数组和列表(将Java代码转换为MIPS),java,arrays,list,mips,Java,Arrays,List,Mips,我用Java编写了这个方法: public static void getQuot(int[] r, int[] q) { int i = 0; while(r[i+1] != 0) { q[i+1] = r[i] / r[i+1]; r[i+2] = r[i] % r[i+1]; System.out.print(q[i+1] + ", "); i++; } } 到目前为止,我在MIPS中有这一点(就

我用Java编写了这个方法:

public static void getQuot(int[] r, int[] q) {

    int i = 0;
    while(r[i+1] != 0) {
        q[i+1] = r[i] / r[i+1];
        r[i+2] = r[i] % r[i+1];

        System.out.print(q[i+1] + ", ");
        i++;
    }
}
到目前为止,我在MIPS中有这一点(就方法而言):

如果相关的话,我在数据中也有这些列表:

.data
r:  .word 0:100
q:  .word 0:100
我遇到的问题是执行类似于
lw$t8,$t1$a0)
的操作,从我得到的错误中,我假设我不能使用寄存器来表示列表上的位置?如果是这样,我如何才能正确地创建这个循环

另外,这是一个数据表,基本上r保存有两个之前输入的整数作为前两个的余数,q保存商(偏移量为1)。45/17=2 r11 17/11=1等

i r_i q_i
0 45
1 17  2
2 11  1
3 6   1
4 5   1
5 1   5
  0

通过将
r
的地址放入寄存器
$a0
开始循环。然后,
0($a0)
表示
r[i]
4($a0)
表示
r[i+1]
8($a0)
表示
r[i+2]
。每个循环增加4个
$a0
。类似地,对于
q
,我们将放入
$a1

您不需要
i
/
$t1
,也不需要
$t2
$t3

大致是这样的(已经有几年了,我手头没有汇编程序):


请注意,您的代码没有包含循环条件,我也省略了循环条件,因为我的记忆太生疏了。:-)

我不熟悉MIPS指令集,但看起来偏移量是一个立即值,不能是寄存器。这就给了你两个选择:如果你可以使用
r
作为你的偏移量,这是最有意义的。否则,使用另一个寄存器将索引值添加到
r
的地址,并使用
lw
将该值作为源和0偏移量。啊,现在这是有意义的。:)让我更好地了解这些低级列表的工作原理。谢谢!
i r_i q_i
0 45
1 17  2
2 11  1
3 6   1
4 5   1
5 1   5
  0
la $a0,r
la $a1,q
getQuot:
lw $t8,0($a0) # $t8 = r[i]
lw $t9,4($a0) # $t8 = r[i+1]
div $t8,$t9
mflo $t4
sw $t4,4($a1) # store quotient in q[i+1]
mfhi $t4
sw $t4,8($a0) # store remainder in r[i+2]
addi $a0,$a0,4 # next r
addi $a1,$a1,4 # next q