0

現在、MIPS プログラムに QtSpim を使用しています。目的は、加算を使用して乗算することです。これは比較的簡単な私のコードです:

.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 は毎回 1 ずつ減算されます。どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

この行:

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

私はそれがあるべきだと思います:

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

tempX ごとに値を追加したいので、新しい値 (inputX +inputX) を割り当てません。

于 2013-09-18T00:19:26.863 に答える