2016-04-18 3 views
0

Я пытаюсь суммировать значения «arrayA» со значениями другого «arrayB» и присваивать эту сумму в той же позиции, где индекс находится в «arrayA», но вывод это результат, который я не понимаю. Пожалуйста, может кто-нибудь мне помочь?Попытка суммировать значения двух массивов

Код:

.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 и аргумент для нескольких системных вызовов), что, очевидно, не работает.

Я предлагаю вам использовать другой регистр для хранения адреса arrayA. А также использовать обычные имена регистров ($v0, $a1, $t2 и т. Д.) Во избежание ошибок, подобных этим.


Вы также с помощью системного вызова 1 неверно:

la $a0, sum 

Системный вызов 1 ожидает значение для печати должны быть помещены в $a0, но вы размещения адреса значения в $a0 , Вместо la здесь вы должны использовать lw. Конечно, переменная sum не нужна, поскольку вы могли бы просто добавить $t0 и $t1 в $a0 напрямую.

+0

Michael, я изменил имя регистра «arrayA» как «arrayB», но проблема не устранена. Я изменил код моего вопроса. – dsd

+0

То, как вы печатаете сумму, неверно. См. Мой обновленный ответ. И, пожалуйста, исправьте форматирование своего вопроса. – Michael

+0

Спасибо, Майкл, теперь код работает. Я изучаю MIPS, и это немного сложно, потому что у меня нет опыта. Еще раз спасибо, ты лучший. – dsd

Смежные вопросы