问题描述
.text
main: #Main function to be run
la $a0,prompt
li $v0,4
syscall
la $a0,n0
li $a1,8
li $v0,8
syscall
move $t0,$v0
la $a0,n1
li $a1,8
li $v0,8
syscall
move $t1,n2
li $a1,8
syscall
move $t2,n3
li $a1,8
syscall
move $t3,$v0
la $a0,n4
li $a1,8
syscall
move $t4,$v0
#Outputs
la $a0,($t0)
li $v0,8
syscall
la $a0,($t1)
li $v0,($t2)
li $v0,($t3)
li $v0,4
syscall
la $a0,($t4)
li $v0,4
syscall
li $v0,10
syscall
.data
prompt: .asciiz "Enter a series of 5 formulae:\n" #The prompt to ask the user to type 5 strings
n0: .space 20
n1: .space 20
n2: .space 20
n3: .space 20
n4: .space 20
解决方法
这是做什么:
找出您的汇编代码的哪一行对应于0x00400090
或异常的地址。那是导致故障的特定指令。然后查找该指令的输入错误(即,此处的值为0x00000008
,并修改代码以使寄存器具有正确的地址)。
您可以在MARS模拟器中执行此操作。当它报告异常时,请查看例外指令,然后检查该点的寄存器值。如果需要,您还可以在例外指令上或其之前设置一个断点,然后重新运行它,以便可以在异常发生之前查看其演变时的寄存器状态。