使用MIPS查找数组的总和

时间:2012-03-19 02:31:20

标签: mips

所以我遇到了问题。我认为a是一个单词数组,a的基地址保存在$ a0中。所以对于int [10],使用mips找到这个数组的总和。我真的不知道从哪里开始有人可以帮助我开始,我想我应该能够完成它。非常感谢!

1 个答案:

答案 0 :(得分:1)

由于您获得了数组开头的地址,因此您知道这也是您的第一个元素。由于这是一个int数组,我假设它意味着它将使用mips32上一个字大小的存储空间,即4个字节。因此,[1]位于[0] + 4字节的地址。 A [2]位于[0] + 8字节或[1] + 4字节等地址...

由此可见,您只需循环10次,每次加载一个单词并添加值。

基本流程是:

  1. 设count = 0,sum = 0(sum是你的返回值,所以$ v0)
  2. 将$ a0中的字值加载到寄存器
  3. 设置$ a0 = $ a0 + 4(从[count]移动到[count + 1],整数在mips32上是4个字节)
  4. 将sum = sum +加载字值的寄存器设置为
  5. count = count + 1
  6. 如果计数< 10? (设置小于,分支)转到#2
  7. 跳转和链接(假设我们的总和已经在$ v0中)
  8. 注意:给出的基址必须是字对齐的。

    优化注释:您可以通过在步骤1之前将某些寄存器设置为$ a0 + 40来优化执行的指令数。这意味着您可以删除步骤5,并且步骤6将检查$ a0是否小于该值在步骤1之前注册您设置的。(最后一次优化是将步骤4移动到步骤6的延迟槽。如果您使用的是模拟器,则可能不支持此功能)