我正在尝试在 MIPS 中复制以下 C 代码:
//sum, n and added are integers and have already been initialized
if(n%3 == 0){
sum = sum + n;
added = added + 1;
}
这是我尝试做的。
#Let t0 = n
#Let s0 = sum
#Let a0 = added
#All have been set earlier in the program
addi $t1, $zero, 3 #Let t1 = 3 for division
div $t0, $t1 #Remainder will be stored in $HI
bne $HI, $zero, ENDIF #skip to ENDIF when remainder != 0; same as if(n%3 == 0)
add $s0, $s0, $t0
addi $a0, $a0, 1
ENDIF:
当我在我的 MIPS 模拟器中运行它时(我正在使用 QtSpim),我在 if 语句上得到一个编译器错误。上面写着:
bne $HI, $zero, ENDIF #skip to ENDIF when remainder != 0; same as if(n%3 == 0)
^
这句话到底有什么问题?我可以看到 ^ 在 $HI 之下。我的 div 语句有问题,导致 $HI 出现错误吗?或者不能在这样的分支中使用 $HI 吗?我需要将 $HI 移至临时寄存器吗?还是分支语句有问题?
谢谢您的帮助!