хранение массива от пользователя и доступ к нему

Мне нужно создать массив int на основе пользовательского ввода, суммировать целые числа и вывести сумму и сам массив.

Мой код правильно вычисляет сумму, но я не могу вывести список. Он выводит только последнее число и нули, а затем застревает в бесконечном цикле в PRINTLIST.

Я думаю проблема в доступе к массиву. Может кто-нибудь помочь мне?

    .data   

intro:  

    .asciiz "Enter numbers\n"

sum:    

    .asciiz "\nSum= "

list:

    .asciiz "\nList looks like: "       

array:  

    .space 400
    .text

main:

    li  $t1,0       #count
    la  $a1,array   

    li  $v0,4
    la  $a0,intro   
    syscall

    j   INPUT
    jr  $ra

GETLIST:

    li   $v0, 5     
    syscall

    move $t0,$v0    
    bltz $t0,SUM    #leave if negative

    add $t2,$t2,$t0 
    add $t1,$t1,1   #increment counter

    sw  $v0,0($a2)  #store in array
    add $a0,$a0,4   

    move $t5,$t2    

    j   GETLIST     

SUM:

    li  $v0,4
    la  $a0,sum
    syscall

    li  $v0,1
    move    $a0,$t5     #sum to a0
    syscall

    li  $v0,4
    la  $a0,list
    syscall

    add $t1,$t1,-1
PRINTLIST:

    lw  $t0,0($a1)
    add $a1,$a1,4
    add $t1,$t1,-1

    li  $v0,1
    move    $a0,$t0     
    syscall

    bltz    $t1,NEXT    #leave when end of list 
    j   PRINTLIST

person luvAtime41    schedule 15.06.2015    source источник


Ответы (1)


Некоторая ошибка, которую я нашел:

В ГЕТЛИСТЕ:

sw  $v0,0($a2)  #store in array
add $a0,$a0,4   #next number    <= instead write 'add $a2,$a2,4' if you want don't want to overwrite it.

Также проблема при печати списка заключается в том, что вы добавляете $a2 для хранения числа в массиве. Но вы забыли повторно присвоить значение $a2 начальному адресу массива. Следовательно, это может быть решено с помощью:

    add $t1,$t1,-1
    la $a2, array        <= line added
PRINTLIST:
person Rakholiya Jenish    schedule 15.06.2015