我正在尝试编写一个程序,要求用户输入6个数字,然后将其全部添加为输出,但是我输入的所有内容都出现错误:
错误:无效的程序计数器值:0x00000000
开始:执行由于错误而终止。
我不知道如何解决它,也不知道要修复哪一行。谢谢!
.data
# user input number for addition
msg1: .asciiz "Enter first number : "
num1: .word 1
msg2: .asciiz "Enter second number : "
num2: .word 1
msg3: .asciiz "Enter third number : "
num3: .word 1
msg4: .asciiz "Enter fourth number : "
num4: .word 1
msg5: .asciiz "Enter fifth number : "
num5: .word 1
msg6: .asciiz "Enter sixth number : "
num6: .word 1
.text
addi $sp,$sp,-20 # stack to save data
li $v0,4
la $a0,msg1 # enter first number
syscall
li $v0,5
la $a0,num1 # read number
syscall
sw $a0,0($sp) # push to sp
li $v0,4
la $a0,msg2
syscall
li $v0,5
la $a0,num2
syscall
sw $a0,4($sp)
li $v0,4
la $a0,msg3
syscall
li $v0,5
la $a0,num3
syscall
sw $a0,8($sp)
li $v0,4
la $a0,msg4
syscall
li $v0,5
la $a0,num4
syscall
sw $a0,12($sp)
li $v0,4
la $a0,msg5
syscall
li $v0,5
la $a0,num5
syscall
sw $a0,16($sp)
li $v0,4
la $a0,msg6
syscall
li $v0,5
la $a0,num6
syscall
li $t0, 6 # initialize counter
adds: # addition loop
beqz $t0, exit # counter zero exit
lw $a1,0($sp)
add $a0,$a0,$a1 # add numbers
addi $sp,$sp,4 # increment sp
addi $t0,$t0,-1 # decrement count
j adds # loop
li $v0,1
syscall
exit:jr $ra
li $v0,10
syscall
答案 0 :(得分:0)
读取整数的调用:
li $v0,5
la $a0,num1 # read number
不正确-您只需要将v0设置为5并执行syscall-读取的号码将在v0中-您需要对其进行操作-而不是像您当前正在使用的a0。
您要遍历6次循环,并在sp上加4-即:增加24,但是您在堆栈上分配了20个空间,所以现在当其他任何东西占用堆栈时,得到的不是他们的想法>
您没有主标签,因此它甚至可能无法运行您的代码。
当您到达出口时,系统调用10永远不会发生,出口会跳回到ja。
如果您在调试器中运行代码并单步执行,您将看到它在做什么。