MIPS汇编jal指令未保存返回地址报PC 0x00000000错误咨询
问题分析
你遇到的报错和jal指令本身无关,并非jal未成功存储返回地址,核心问题如下:
- 绝大多数MIPS汇编模拟器(如SPIM、MARS)默认会执行
.text段的第一条指令,你的代码中.text段下第一个定义的标签是Read_Input,程序启动时会直接从该函数开始执行,而非你声明的main函数。此时$ra寄存器还未被任何jal指令赋值,初始值为0x0,执行到Read_Input末尾的jr $ra时就会跳转到0x0地址,触发非法程序计数器报错。 - 即使你声明了
.globl main,大部分模拟器默认不会自动将main识别为入口地址,需要手动开启对应配置或者调整代码顺序。
修复方案
有两种常用修复方式:
- 调整代码顺序,将
main函数放到.text段的最开头,保证程序启动首先执行main逻辑:
.globl main .data .text main: jal Read_Input move $t1, $v0 jal Read_Input move $t2, $v0 jal Read_Input move $t3, $v0 nop END: li $v0, 10 syscall Read_Input: li $v0, 5 syscall jr $ra
- 修改模拟器配置,指定
main为程序入口。以MARS为例,点击顶部菜单栏「Settings」 -> 勾选「Initialize Program Counter to 'main' if defined」,保存后重启运行即可。
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

