0x00400010 处的运行时异常:地址超出范围 0x00000000

Runtime exception at 0x00400010: address out of range 0x00000000

我的 MIPS 实现,遍历字符串: 我不断收到:

不确定为什么会这样,我尝试了调试和单步执行。如果有人确切知道这段代码有什么问题,请回答。我正在继续尝试调试..

是的,这是完整的代码,请随意在 QtSpim 中运行它。

    .data

   STR_str:
    .asciiz "Cow, Bird, Beer"

   .text

   loop_over_strings:

    addi    $sp, $sp, -4        
    sw  $ra, 0($sp) 
    sw  $a1, 8($sp)

     loop:
    
      sw $a0, 4($sp)        
      lb $t0, 0($a0)            
      beqz $t0, end_loop
    
    jalr $a1                
    
    lw $a0, 4($sp)
    lw $a1, 8($sp)
    addi $a0, $a0, 1        
    j loop  

   end_loop:
    lw  $ra, 0($sp)         
    addi    $sp, $sp, 4     

    jr  $ra


    .text
    .globl main

   main:
    addi    $sp, $sp, -4    # PUSH return address
    sw  $ra, 0($sp)
    
    la  $a0, STR_str
    la  $a1, ascii
    jal loop_over_strings
    
    lw  $ra, 0($sp) # POP return address
    addi    $sp, $sp, 4 
    
    jr  $ra

您已将部分代码放入 .data 部分。它需要在 .text 部分。

loop_over_strings 中,您正在分配 4 个字节的堆栈 space 但它使用了 12 个字节,因此某些内容将被覆盖 — 被覆盖的内容可能是其他人的堆栈 return 地址.