【问题标题】:MIPS store exception errorMIPS 存储异常错误
【发布时间】:2017-10-18 23:23:43
【问题描述】:

所以我正在使用 QtSpim 来运行我的 mips 程序。我基本上做了一个工作程序,但现在我不断收到异常错误。我已经尝试减少我的代码,所以这里是错误开始的地方。

.text
.globl main
main:
.data 
    message1: .asciiz "The maximum is "
    message2: .asciiz "The summation is "
    myArray: .space 32
.text
    addi $s0, $zero, 11
    addi $s1, $zero, 12
    addi $s2, $zero, -10
    addi $s3, $zero, 13
    addi $s4, $zero, 9
    #addi $s5, $zero, 12 not needed
    addi $s5, $zero, 14
    addi $s6, $zero, 15
    addi $s7, $zero, -20

    addi $t0, $zero, 0

    sw $s0, myArray($t0)
    addi $t0, $t0, 4

    li $v0,10
    syscall

错误是 sw $s0, myArray($t0)

【问题讨论】:

  • 另外,如果有人能告诉我为什么这被否决,我很乐意在未来解决我的问题
  • @ZalmanStern 此评论更针对任何知道为什么会被否决的人,以便我将来可以提出更好的问题
  • 是的,我在解释这个标题是一个改进的候选者。
  • 哦,明白了,对不起
  • exact 错误信息是什么?发生异常时相关寄存器的值是多少? myArray的地址是什么?

标签: mips


【解决方案1】:

您可能需要确保 myArray 与 32 位边界对齐。我建议在声明之前尝试 .align 指令。

【讨论】:

  • 我将代码更改为 myArray: .align 32 .space 32 但我仍然得到同样的错误
  • 很确定 .align 需要放在标签之前。或许可以看到:stackoverflow.com/questions/19608845/…
  • 我有它作为 .align 32 然后我的 Array: .space 32,但我仍然得到同样的错误
  • 我提到了对齐,因为在 myArray 声明之前添加第二个消息字符串时这会改变,这也是 sw 指令可能从工作变为故障的原因。要么汇编器使用临时寄存器将 sw 转换为多条指令,要么要求 myArray 位于低 64k 内存中。如果您可以获得寄存器值和错误指令,以及可能的特定异常类型,应该很容易调试。 IE。确保是 sw 出现故障。调用函数可能还需要保存调用者保存寄存器。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2022-10-13
相关资源
最近更新 更多