因此,我的教授将这个问题放在他的幻灯片中,这是他的答案,而不是理解他是如何将其转换为MIPS所以如果有人能帮助解释这个问题那就太好了。 变量i在$ s3中,k在$ s5中,save []的基地址在$ s6中
他给了我们这个C代码:
while( save[i] == k ) {
i += 1;
}
并在回复时给了我们这个MIPS代码:
Loop: sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit:
答案 0 :(得分:3)
Loop: sll $t1, $s3, 2 # $t1 = 4*i (this is the offset to get to the ith element in your array)
add $t1, $t1, $s6 # $t1 = 4*i + base addr of save (getting the address of save[i])
lw $t0, 0($t1) # $t0 = save[i] (actually loading 4B from address of save[i], so getting the actual number here)
bne $t0, $s5, Exit # branch to Exit if save[i] != k
addi $s3, $s3, 1 # i++
j Loop
Exit:
此处需要注意的事项:
save
是一个int
数组,因此每个元素都是4B。这就是偏移为4*i
的原因。