我遇到了这个问题,要求从c转换为MIPS代码。
B[8] = A[i-j];
其中$ s6和$ s7存储数组A和B的基址.i和j存储在$ s3和$ s4中。
这是我的解决方案:
sub $t0,$s3,$s4 # i - j
sll $t0,$t0,2 # (i - j) * 4
add $t0,$s6,$t0 # A + (i - j) * 4
lw $t1,0($t0) # *(A + (i - j) * 4)
sw $t1,32($s7) # *(B + 32) = *(A + (i - j) * 4)
这是给我们的解决方案:
sub $t0, $s3, $s4
add $t0, $s6, $t0
lw $t1, 16($t0)
sw $t1, 32($s7)
给予我们的解决方案对我没有任何意义,因为它几乎在所有情况下都失败了,因为地址可能不是字对齐的。有人认为给我们的解决方案是正确的吗?