将C转换为MIPS

时间:2016-09-28 05:01:55

标签: c for-loop mips

我试图将此C代码直接翻译为mips,而不修改任何说明:

  for (i=0; i<128; i++)

           { a[i] = b[i] - c[i] + 5; }

我只是想了解一些事情。这是我到目前为止所拥有的

add $t4, $zero, $zero    # I1 i is initialized to 0, $t4 = 0
Loop:
add $t5, $t4, $t1        # I2 temp reg $t5 = address of b[i]
lw $t6, 0($t5)          # I3 temp reg $t6 = b[i]
add $t5, $t4, $t2        # I4 temp reg $t5 = address of c[i]
lw $t7, 0($t5)          # I5 temp reg $t7 = c[i] + 5
sub $t6, $t6, $t7        # I6 temp reg $t6 = b[i] - c[i] + 5
add $t5, $t4, $t0        # I7 temp reg $t5 = address of a[i]
sw $t6, 0($t5)          # I8 a[i] = b[i] - c[i] + 5 
addi $t4, $t4, 4            # I9 i = i + 1
slti $t5, $t4, 256      # I10 $t5 = 1 if $t4 < 128, i.e. i < 10
bne $t5, $zero, Loop        # I11 go to Loop if $t4 < 128
exit:

我不确定我是否需要自己加载5,或者如果它可以用c [i]加载它的方式?任何提示都会有所帮助,因为我还在尝试学习mips。谢谢!

1 个答案:

答案 0 :(得分:1)

5这里是一个常数。执行lw $t7, 0($t5)之类的操作时,$t7不会加载5,除非$t5中的地址(确切地说是单词)零偏离其中5(并且您尚未在代码中的所述位置存储5

如果您想将常量5添加到寄存器(例如$t0),为什么不addi $t0, 5