QtSpim错误“试图在0x0040000c处执行非指令”

时间:2019-06-30 16:32:37

标签: mips qtspim

我刚刚开始学习MIPS 32并尝试运行此代码,它在MARS MIPS模拟器上运行顺利,但是当我将其保存到(.asm)文件中并尝试在QtSpim上运行时,控制台弹出并显示消息“你好世界”,但出现错误:“试图在0x0040000c处执行非指令”也出现了,我错过了什么吗?或者任何部件不正确?

Error screnshot

我还尝试取消选中异常处理程序,但无济于事。

  • 这是代码:

    .data
        Message: .asciiz "Hello World"
    
    .text
        li $v0, 4
        la $a0, Message
        syscall
    

2 个答案:

答案 0 :(得分:0)

根据spim的观点,程序存在两个问题

  1. spim需要一个main,并且在程序中没有声明。

  2. 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