0x00400010 处的运行时异常:地址超出范围 0x00000000
Runtime exception at 0x00400010: address out of range 0x00000000
我的 MIPS 实现,遍历字符串:
我不断收到:
- 异常发生在 PC=0x10010010
- 读取的文本地址错误:0x10010010
不确定为什么会这样,我尝试了调试和单步执行。如果有人确切知道这段代码有什么问题,请回答。我正在继续尝试调试..
是的,这是完整的代码,请随意在 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 地址.
我的 MIPS 实现,遍历字符串: 我不断收到:
- 异常发生在 PC=0x10010010
- 读取的文本地址错误:0x10010010
不确定为什么会这样,我尝试了调试和单步执行。如果有人确切知道这段代码有什么问题,请回答。我正在继续尝试调试..
是的,这是完整的代码,请随意在 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 地址.