我正在尝试将这段C代码直接翻译成MIPS代码,而不修改任何指令,以使其运行更加高效:
for(i = 0; i != j; i += 2)
b[i] = a[i] - a[i + 1]
我并不是真的要使用MIPS编写代码,只是想了解一些东西。目前我的进展并不大:
#t5 = i
$t6 = j
#t1 = a
#t2 = b
#t3 = c
#t10, t11, t12 = free
add $t5, $zero, $zero # initialize i = 0
loop:
bne $t5, $t6 # check if i is not equal to j
addi $t5, $t5, 2 # i += 2
add $t10, $t5, $t11 # temp reg $t10 = address of b[i]
lw $t2, 0($t10) # temp reg $t2 = b[i]
add $t10, $t5, $t12 # temp reg $t10 = address of a[i]
lw $t1, 0($t10) # temp reg $t1 = a[i]
我不确定bne
是否正确,因为我没有指定要跳转到哪里。我已经阅读了有关MIPS中数组的内容,但这让我感到困惑。我知道当将数组放入寄存器时,需要使用正确的字节地址偏移量。如果数组中是一个变量而不是一个数字,那么情况会相同吗?任何指导或提示都将很好。谢谢!