MIPS和数组的优化

时间:2013-10-24 05:00:21

标签: assembly mips

我有一些代码可以对数组求和50次。现在我被要求通过至少1条指令来减少此代码。我能想到的是将此循环增加到100次,然后每个循环添加一个元素。但这会增加指令数量。

      addi $t1, $0, 50 
LOOP: lw $s1, 0($s0) 
      add $s2, $s2, $s1 
      lw $s1, 4($s0) 
      add $s2, $s2, $s1 
      addi $s0, $s0, 8 
      subi $t1, $t1, 1 
      bne $t1, $0, LOOP

请注意,您只能重写此代码,而不能编写另一个sumArray算法

1 个答案:

答案 0 :(得分:1)

这是一条指令,通过“组合”地址和循环计数器,从而向后汇总数组:

      addi $t1, $s0, 400   # $t1 = $s0 + 50*2*sizeof(word)
LOOP: lw $s1, -4($t1) 
      add $s2, $s2, $s1 
      lw $s1, -8($t1) 
      add $s2, $s2, $s1 
      sub $t1, $t1, 8 
      bne $t1, $s0, LOOP