簡體   English   中英

MIPS,處理數組和列表(將Java代碼轉換為MIPS)

[英]MIPS, Dealing With Arrays and Lists (Converting Java code to 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中有這個(就方法而言):

# get Quotients, store to q
li $t1,0 # i
getQuot:
add $t2,$t1,4 # i + 1
add $t3,$t1,8 # i + 2
la $a0,r
lw $t8,$t1($a0) # load t8&t9 for division
lw $t9,$t2($a0)
div $t8,$t9
mflo $t4
sw $t4,$t3($a0) # store quotient in r[i+2]
la $a0,q
mfhi $t4
sw $t4,$t2($a0) # store remainder in r[i+1]
addi $t1,$t1,1 # i++

如果相關,我也會在.data中列出這些列表:

.data
r:  .word 0:100
q:  .word 0:100

我遇到的問題是做一些像lw $t8,$t1($a0)的錯誤,我得到的錯誤我假設我不能使用寄存器來表示列表中的位置? 如果是這樣,我該怎樣才能正確創建這個循環?

此外,這里是一個數據表,基本上r保持剩余部分,其中兩個先前輸入的整數作為前兩個,並且q保持商(偏移一個)。 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] 每個循環增加$a0乘以4。 同樣對於我們將放入$a1 q

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

大概是這樣的(已經有幾年了,而且我沒有匯編器方便):

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

請注意,您的代碼不包含循環條件,我也省略了它,因為我的回憶是如此生疏。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM