съхраняване на масив от потребител и достъп до него

Трябва да създам 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)


Някои грешки, които открих, са:

В GETLIST:

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