2014-05-05 58 views
-1

你好,我在數組函數中爲以下findMin編號得到異常7 [壞數據地址]。數組的長度已經在$ a1中,數組的起始地址是$ a0。在所有的說法和完成之後,我希望在$ v0中擁有min。 我的函數適用於有2個元素的數組,但在使用更大尺寸的數組時會發生異常7錯誤。我通過添加到地址而不是使用像4中4($ a0)偏移之類的東西來抵消數組。MIPS findmin的數組函數

+0

什麼行崩潰? –

+0

我相信這是循環標籤中的$ t5,0($ a0)。拋棄我的主要原因是,它如何適用於大小爲2的數組,但不會更大? – maxsorenson

回答

2

這裏的關鍵是add $a0, $a0, $t1。考慮在具有N元素的數組的情況下會做什麼:在第二次迭代中,您將在第三次迭代2*4上添加1*4,依此類推。所以在第三次迭代中,您將嘗試從array + 1*4 + 2*4 == array + 3*4而不是array + 2*4中讀取。在N:th迭代中,您將嘗試從array + 1*4 + 2*4 + ... + (N-1)*4中讀取。

之前的lw應該被刪除。 後可更新地址。

+0

非常感謝!所以,因爲我沒有回到數組的原始起始地址,我試圖訪問數組中不存在的地方?如果我每次使用相同的起始地址,我的代碼是否正確? – maxsorenson

+0

剛剛改變了添加$ a0,$ a0,$ t1來添加$ t6,$ a0,$ t1來保存數組$ a0的起始地址,它的工作原理!再次感謝。 – maxsorenson