2014-05-05 30 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