试图在MIPS中运行此代码,我收到一条错误消息:“运行时异常位于0x00400090:地址超出范围0x00000008”

问题描述

.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模拟器中执行此操作。当它报告异常时,请查看例外指令,然后检查该点的寄存器值。如果需要,您还可以在例外指令上或其之前设置一个断点,然后重新运行它,以便可以在异常发生之前查看其演变时的寄存器状态。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...