我目前正在将 QtSpim 用于 MIPS 程序。目标是使用加法来乘法。这是我的代码,相对简单:
.data
inputX: .word 5
inputY: .word 4
tempX: .word 0
constantOne: .word 1
finalX: .word 0
.text
main:
lw $t1, inputX
lw $t2, inputY
lw $t0, tempX
lw $t3, constantOne
lw $t4, finalX
beq $t2, $zero, Exit #when Y equals zero, X is already zero so exits.
Loop: beq $t2, $t3, yIsOne #when y is one skip rest of loop
add $t0, $t1, $t1 #actual "multiplication".
sub $t2, $t2, $t3 #what makes loop continue
bne $t2, $zero, Loop #while Y isnt yet 0.
yIsOne: add $t0, $t0, $t1 #adds X to 0 or the multiplied Xs
Exit:
sw $t4, finalX
当我运行程序时,我得到了这个:
R8 [t0] = f
R9 [t1] = 5
R10 [t2] = 1
R11 [t3] = 1
R12 [t4] = 0
这非常令人困惑,所以我单步执行,第一次 t0 应该在其总数中添加 5,它变成了 a。它一直保持这种状态,直到我的 yIsOne 跳跃之后,它变成了 f。其他一切似乎工作正常。它会正确跳回循环。t2 每次减一。任何帮助表示赞赏。谢谢。