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