2016-04-18 14 views
0

"arrayA"の値を別の "arrayB"の値で合計しようとしていますが、この合計を "arrayA"のインデックスと同じ位置に割り当てようとしていますが、私が理解していない結果です。どうか、誰かが私を助けてくれるの?2つの配列の合計値を試す

コード:

.data 
     arrayA: .word 1,12,35,473,2,32,4 
     arrayB: .word 0,3,12,32,3,4,9 
     length: .word 7 
     count: .word 0 
     line: .asciiz "\n" 
     sum: .word 0 
    .text 
    MAIN: 
     la $s1, arrayA 
     la $s2, arrayB 
     lw $t3, length 
     li $t4, 0 
     lw $t5, count 
FOR: 
     beq $t3, $t4, EXIT 
     lw $t0, ($s1) 
     lw $t1, ($s2) 
     add $t0, $t0, $t1 
     sw $t0, ($s1) 
     sw $t0, sum 
     li $v0, 1 
     la $a0, sum 
     syscall 
     li $v0, 4 
     la $a0, line 
     syscall 
     addi $t4, $t4, 1 
     addi $s1, $s1, 4 
     addi $s2, $s2, 4 
     j FOR 
EXIT: 
     li $v0, 10 
     syscall 

出力:

268501060 
268501060 
268501060 
268501060 
268501060 
268501060 
268501060 

答えて

1

$a0$4に別の名前です。したがって、同じレジスタを同時に複数のもの(arrayAの現在の要素のアドレスと2つのシステムコールの引数)で使用しようとしていますが、これは明らかに機能しません。

arrayAのアドレスを保持するために別のレジスタを使用することをお勧めします。また、これらのような間違いを避けるために、従来のレジスタ名($v0$a1$t2など)を常に使用するようにしてください。


ます。また、誤ってシステムコール1使用している:システムコール1は、値が$a0に配置されるように印刷するには期待していますが、$a0に値のアドレスを配置している

la $a0, sum 

を。 laの代わりにlwを使用してください。もちろん、sum変数は$t0$t1を直接$a0に追加したので、変数は不要です。

+0

Michael、 "arrayA"のレジスタ名を "arrayB"に変更しましたが、問題は解決しません。私は自分の質問のコードを変更しました。 – dsd

+0

合計を印刷する方法が間違っています。私の更新された答えを見てください。そしてあなたの質問の書式を修正してください。 – Michael

+0

マイケルさん、本当にありがとう、ありがとうございます。私はMIPSを勉強しています。経験がないので少し難しいです。もう一度ありがとう、あなたは最高です。 – dsd