add $s0, $s0, $s1
add $s0, $s0, $s2
add $s0, $s0, $s3
add $s0, $s0, $s4
没有给出其他说明,所以我只是假设 $s0=a, $s1=b, $s2=c, $s4=d。这是我翻译后的 C 代码的内容,但我不确定它是否正确。
a=a+b+c+d
这是不正确的。你漏掉了$s3
。假设:
register variable
$s0 a
$s1 b
$s2 c
$s3 d
$s4 e
你会有一些类似的东西:
a = a + b + c + d + e;
add $s0, $s0, $s1 # $s0 = $s0 + $s1
add $s0, $s0, $s2 # $s0 = $s0 + $s2 (= $s0 + $s1 + $s2)
add $s0, $s0, $s3 # $s0 = $s0 + $s3 (= $s0 + $s1 + $s2 + $3)
add $s0, $s0, $s4 # $s0 = $s0 + $s4 (= $s0 + $s1 + $s2 + $s3 + $s4)
因此上面的代码会做
$s0 += $s1 + $s2 + $s3 + $s4;
作为旁注,上面的代码引入了不必要的依赖关系,这可能会使执行速度变慢,因为指令不能并行运行。将说明重新排序为
add $t0, $s0, $s1
add $t1, $s2, $s3
add $s0, $s4, $t0
add $s0, $s0, $t1
可能更好