2017-03-07 108 views
0

我想只使用一個數組來反轉數組。當高指數小於或等於低時,我應該繼續切換高低的內容。但是,我得到的地址超出範圍,並且無法找到如何修復它的資源。我應該在倒序數組時使用一個數組。我究竟做錯了什麼?加星標是我得到錯誤的地方。在MIPS彙編中獲取地址超出範圍?

reverseArray: 

     li $t6, 0 #head = first index of array 
     la $s0, array 
     li $t5, 4 
     mult $s0, $t5 
     mflo $t7 #tail = last index of array 



swap: 
    lw $t6, 0($s0) 
    **lw $t4, 0($t7)**  

    sw $t4, 0($s0) 
    sw $t6, 0($t7) 

    add $t7, $t7, -4 
    add $s0, $s0, 4 

    sle $t1,$t7,$s0 
    beq $t1,$0,swap 
+0

您正在使用索引作爲指針。你需要添加基地址。 – Jester

+0

我該怎麼做?什麼是基地址?對不起,我剛剛開始。 @Jester –

+0

'$ s0'是基地址,你似乎把它乘以4.這是錯誤的。您希望按元素大小乘以元素數並添加基地址。 – Jester

回答

0

我假設你想在$t7什麼是數組的最後一個元素的地址。將基地址乘以4不會給你那個地址。你需要計算的是array + (length-1)*4
所以你需要知道數組的長度。您發佈的代碼並不表示您知道數組的長度,但假設您已獲得寄存器$t6中的長度。您需要執行的算法爲:

addiu $t7,$t6,-1 # $t7 = length-1 
sll $t7,$t7,2  # $t7 = (length-1)<<2 == (length-1)*4 
addu $t7,$t7,$s0 # $t7 = (length-1)*4 + array 

swap: 
    lw $t6, ($s0) 
    lw $t4, ($t7) 
    ... etc ...