【问题标题】:Using MIPS to find sum of array使用 MIPS 查找数组的总和
【发布时间】:2012-03-19 15:25:38
【问题描述】:

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

【问题讨论】:

    标签: mips


    【解决方案1】:

    既然你得到了数组的起始地址,你就知道这也是你的第一个元素。由于这是一个 int 数组,我假设这意味着它将使用 mips32 上一个单词大小的存储空间,即 4 个字节。因此a[1]位于a[0]+4bytes的地址。 A[2] 位于地址 a[0]+8bytes 或 a[1]+4bytes 等...

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

    基本流程是:

    1. 让 count = 0, sum = 0(sum 是你的返回值,所以 $v0)
    2. 将一个字值从 $a0 加载到寄存器中
    3. 设置 $a0 = $a0 + 4(从 a[count] 移动到 a[count+1],整数在 mips32 上为 4 个字节)
    4. 设置 sum = sum + 将字值加载到的寄存器
    5. 计数 = 计数 + 1
    6. 如果计数
    7. 跳转和链接(假设我们的总和已经在 $v0 中)

    注意:给你的基地址必须是字对齐的。

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

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2013-03-16
      • 1970-01-01
      相关资源
      最近更新 更多