2017-01-30 7 views
1

キーボードから挿入され、スタックに保存された倍数の合計を取得する方法はありますか? これは私にこの出力を与え、私のコードですが、: 0.0MIPS入力の倍数の合計

load_number: 
move $t0, $a0 
move $t1, $a1 
#counter 
li $t2,0 

while: 
    beq $t2, $t1, end_load 
    #read a double 
    li $v0, 7 
    syscall 
    #save in the stack 
    swc1 $f0, ($t0) 
    addi $t0, $t0, -4 
    addi $t2, $t2, 1 
    #Repeat 
    j while 

............ 

while_sum: 
    beq $t2, $t1, end_sum 
    lwc1 $f2, ($t0) 
    add.d $f4, $f4, $f2 
    addi $t0, $t0, 4 
    addi $t2, $t2, 1 
    j while_sum 

end_sum: 

    li $v0, 3 
    mov.d $f12, $f4 
    syscall 

答えて

0

ダブルだから、あなたのアドレス増分を調整し、lwc1/swc1の代わりにldc1/sdc1を使用する必要が8つのバイトではなく、4です。 。

+0

マイケルと答えに感謝します。私はスタックのバイト数を調整しましたが、ldc1またはsdc1を使用すると火星は私にこのエラーを与えます: ランタイム例外0x00400080:アドレスがダブルワード境界0x7fffefec ldc1またはsdc1の行にある0x35fffefec に揃えられていません。 lwc1またはswc1を使用した場合、私はこれを取得します:1.273197475E-314 3.20 + 3.20を追加すれば助けてくれますか? – Marco

+0

次に、アドレスがダブルワードアライメントされていることを確認する必要があります。アドレスが元々どこから来たのかは不明です。 '.data'セクションで宣言されている配列の場合は、' .align 3'を先行する必要があります。 – Michael

+0

キーボードから数字を尋ねて8を掛けて、スタックの結果をすべて.textセクション。アドレスは関数によって渡されます---> $ a0、$ spのように移動します。 – Marco

関連する問題