我目前正在使用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个加入它的总数,它变成了一个。它一直保持这种状态,直到我的yIsOne跳跃,这是它成为f。其他一切似乎都很好。它会正确地跳回来进行循环。 t2每次减1。任何帮助表示赞赏。感谢。
答案 0 :(得分:1)
这一行:
add $t0, $t1, $t1 #actual "multiplication". t0 = t1+t1
我认为应该是:
add $t0, $t0, $t1 #actual "multiplication". t0 += t1
因为你想为tempX evry循环添加值,所以不分配新值(inputX + inputX)。