使用MARS 4.5编写MIPS汇编BEQ指令遇无效PC值错误求助
解决MARS中BEQ指令的"invalid program counter value"错误
你的问题根源在于把执行代码的标签Stampa放在了.data数据段。MIPS架构中,程序计数器(PC)只能指向.text代码段的指令地址,跳转到.data段的内存地址会触发"invalid program counter value"错误。
修正后的代码
.data Message_1: .asciiz "I numeri sono uguali" .text main: addi $t1, $zero, 3 addi $t2, $zero, 3 beq $t1, $t2, Stampa # 现在跳转到.text段内的标签 # 如果不相等,执行退出程序 li $v0, 10 syscall Stampa: li $v0,4 la $a0, Message_1 syscall # 打印完后退出程序 li $v0, 10 syscall
关键修改点
- 将
Stampa代码块从.data段移动到.text段,确保所有可执行指令都处于代码段范围内 - 在
main的分支路径和Stampa执行完毕后添加li $v0,10+syscall的退出调用,避免程序执行完后出现异常
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

