我有一些代码可以对数组求和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算法
答案 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