输入错误:无效的程序计数器值:0x00000000加总输入

时间:2018-12-27 07:06:33

标签: assembly mips mars-simulator

我正在尝试编写一个程序,要求用户输入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

1 个答案:

答案 0 :(得分:0)

读取整数的调用:

li $v0,5
la $a0,num1     # read number

不正确-您只需要将v0设置为5并执行syscall-读取的号码将在v0中-您需要对其进行操作-而不是像您当前正在使用的a0。

您要遍历6次循环,并在sp上加4-即:增加24,但是您在堆栈上分配了20个空间,所以现在当其他任何东西占用堆栈时,得到的不是他们的想法

您没有主标签,因此它甚至可能无法运行您的代码。

当您到达出口时,系统调用10永远不会发生,出口会跳回到ja。

如果您在调试器中运行代码并单步执行,您将看到它在做什么。