我刚刚开始学习MIPS 32并尝试运行此代码,它在MARS MIPS模拟器上运行顺利,但是当我将其保存到(.asm)文件中并尝试在QtSpim上运行时,控制台弹出并显示消息“你好世界”,但出现错误:“试图在0x0040000c处执行非指令”也出现了,我错过了什么吗?或者任何部件不正确?
我还尝试取消选中异常处理程序,但无济于事。
这是代码:
.data
Message: .asciiz "Hello World"
.text
li $v0, 4
la $a0, Message
syscall
答案 0 :(得分:0)
根据spim的观点,程序存在两个问题
spim需要一个main,并且在程序中没有声明。
spim在最后一条指令之后继续执行“程序”。最后应该有一个系统调用10才能停止执行。
因此,用于spim的程序的工作版本为
.data
Message: .asciiz "Hello World"
.text
main: # start of program
li $v0, 4
la $a0, Message
syscall
exit:
li $v0, 10 # syscall 10 terminates program
syscall # and exits
实际上,spim有点敏感,如果可能的话,我建议您使用火星。除此之外,最好在程序中始终添加main和exit。
答案 1 :(得分:0)
与此相关的错误
.text
__start:
addiu $v0, $zero, 10
addiu $t0, $zero, 5
addiu $t1, $t0, 300
addiu $t2, $zero, 500
addiu $t3, $t2, 34
addiu $t3, $t3, 45
syscall
这是您的建议,但仍然存在相同的错误((
SPIM Version 8.0 of January 8, 2010
Copyright 1990-2010, James R. Larus.
All Rights Reserved.
See the file README for a full copyright notice.
Exception occurred at PC=0x00000000
Bad address in text read: 0x00000000
Attempt to execute non-instruction at 0x80000180