从用户存储数组并访问它

时间:2015-06-15 20:13:13

标签: arrays assembly input mips

我必须根据用户输入创建一个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

1 个答案:

答案 0 :(得分: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: