0

我目前正在将 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 每次减一。任何帮助表示赞赏。谢谢。

4

1 回答 1

1

这一行:

add $t0, $t1, $t1 #actual "multiplication". t0 = t1+t1

我认为应该是:

add $t0, $t0, $t1 #actual "multiplication". t0 += t1

因为您想为 tempX evry 循环添加值,而不是分配新值(inputX +inputX)。

于 2013-09-18T00:19:26.863 回答