Почему сумма массива неверна? - PullRequest
0 голосов
/ 25 ноября 2018

Первое число в массиве (5) дает размер массива.остальные числа являются элементами в массиве.

Ожидаемый ответ - 10
Фактический ответ - 11

Очень плохо знаком с этим, поэтому я не уверен, почему он дает мне неправильный ответ.

Код:

.data
array: 
.word 5 
.word 0, 1, 2, 3, 4

.text
.globl main
main:

la $t2, array
add $t0, $0, 1 # i = 1
lw  $t4, 0($t2) # $t4 = 5 array[0] = 5
add $t1, $zero, $zero   # sum
addi $t5, $t4, 1  # $t5 = 6

loop:

slt $t3, $t0, $t5 # i > 6?
beq $t3, $zero, done

lw  $t4, ($t2)  # $t4 = array[i]
addi    $t2, $t2, 4

add $t1, $t1, $t4 
addi    $t0, $t0, 1 # i++
j loop
done:

add $a0, $0, $t1     

li  $v0, 1
syscall

li  $v0, 10
syscall

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 26 ноября 2018

В вашем коде:

lw  $t4, 0($t2) 

Код выше: T2 - это массив.Lw получает 1-е значение массива и помещает в t4, что нормально.

addi $t5, $t4, 1  # $t5 = 6

Код выше: Устанавливает ли ваш массив ограничение размера массива + 1, что нормально.

lw  $t4, ($t2)  # $t4 = array[i]

Код выше получает массив [i], ОДНАКО это не то, чтовы хотели - вы хотели массив [i + 1] (то есть: не включать массив [0])

Возможно, проще всего - увеличить t2 до массива [1], а затем выполнить цикл:

  addi $t2, $t2, 4 # set address to &array[1]
loop:
...