Mips 发生无限[错误指令地址],并发生忽略错误。可以更改哪些内容来解决此问题?

Mips 发生无限[错误指令地址],并发生忽略错误。可以更改哪些内容来解决此问题?,mips,fibonacci,Mips,Fibonacci,我正在研究一个MIPS斐波那契序列。然而,若我运行程序,我输入一个数字,得到的只是无限次的错误:[错误指令地址]发生并忽略了无限次。我该怎么办?我只允许在“s”之间更改代码 下面是我的MIPS代码 .data newline: .asciiz "\n" str0: .asciiz "Enter a positive integer: " str1: .asciiz "ERROR: received a negative inte

我正在研究一个MIPS斐波那契序列。然而,若我运行程序,我输入一个数字,得到的只是无限次的错误:[错误指令地址]发生并忽略了无限次。我该怎么办?我只允许在“s”之间更改代码

下面是我的MIPS代码

.data

newline:
  .asciiz "\n"

str0:
  .asciiz "Enter a positive integer: "

str1:
  .asciiz "ERROR: received a negative integer!\n"

str2:
  .asciiz "INFO: fibonacci returned "

.text

# $a0: n (<1024)
################################################################################FIXME

fibonacci:
  
  li $t2, 1
  addiu $sp, $sp, -12
  sw $ra, 0($sp)
  sw $s0, 4($sp)
  sw $s1, 8($sp)

  addiu $s0, $a0, 0
  beq $zero, $s0, ResultOne
  beq $t2, $s0, ResultOne
  bltz $s0, Negative

  addiu $a0, $s0, -1
  jal fibonacci
  addiu $s1, $v1, 0
  addiu $a0, $s0, -2
  jal fibonacci
  addu $v1, $v1, $s1
  j finish

ResultOne:
  
  li $v0, 1
  li $v1, 1
  j Finish

Negative:

  li $v0, 0
  j Finish

Finish:
  
  lw $s1, 8($sp)
  lw $s0, 4($sp)
  lw $ra, 0($ra)
  addiu $sp, $sp,12
  jr $ra

# FIXME
################################################################################

.globl main
main:

  # print_string str0
  li $v0, 4
  la $a0, str0
  syscall

  # $t0 = read_int
  li $v0, 5
  syscall
  move $t0, $v0

  # $s0 = $ra; fibonacci($t0); $ra = $s0
  move $s0, $ra
  move $a0, $t0
  jal fibonacci
  move $ra, $s0

  # $t0 = $v0; $t1 = $v1
  move $t0, $v0
  move $t1, $v1

  # if ($t0 == 0) { goto main_failure }
  beq $t0, $zero, main_failure

main_success:

  # print_string str2
  li $v0, 4
  la $a0, str2
  syscall

  # print_int $t1
  li $v0, 1
  move $a0, $t1
  syscall

  # print_string newline
  li $v0, 4
  la $a0, newline
  syscall

  # goto main_return
  b main_return

main_failure:

  # print_string str1
  li $v0, 4
  la $a0, str1
  syscall

main_return:

  # return
  jr $ra



.data
新行:
.asciiz“\n”
str0:
.asciiz“输入一个正整数:”
str1:
.asciiz“错误:收到一个负整数!\n”
str2:
.asciiz“信息:返回斐波那契”
.文本

#$a0:n(1.实际完整的错误消息是什么?2.您使用的是SPIM还是MARS?我使用的是SPIM。很抱歉,我忘了提及这一点。确切的错误消息如下。在PC=0x00115798文本读取中出现异常错误地址:0x00115798异常6[错误指令地址]在PC=0x0011579c文本读取错误地址时发生和忽略的异常:0x0011579c异常6[错误指令地址]在PC=0x001157a0文本读取错误地址时发生和忽略的异常:0x001157a0异常6[错误指令地址]发生并忽略了,我只是得到了无限数量的此类错误…我不知道为什么!您的程序正在将处理器发送到无效内存以获取指令。要了解您的程序为什么这样做,请单步执行,直到您得到错误为止。(您程序的)实际指令将其发送到weeds的是一台值类似于00400xxx的PC。然后,您需要检查该指令,并可能查看其执行情况。