You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MIPS中beq指令无法正确跳转至对应函数问题求助

MIPS温度转换程序错误排查

你的问题核心原因出在输入字符的读取处理上:

  • 在最初的代码中,调用syscall 8(读取字符串)后,$a0存储的是缓冲区str1的内存地址,而非你输入的字符本身。你直接拿这个地址和'c'/'C'/'f'/'F'的ASCII值做比较,两者数值完全不匹配,所以无论输入什么都会跳转到error分支。

你添加的lb $a0, ($a0)指令是正确的解决方案:这条指令会把str1指向的第一个字节(即你输入的第一个字符)加载到$a0寄存器中,让后续的beq指令能正确匹配字符。

如果添加该指令后仍有问题,排查方向:

  • 检查输入是否有多余字符:比如输入时不小心在字母前加了空格,导致第一个字符不是目标字母
  • 添加调试代码验证$a0的值:在lb指令后插入以下代码,打印输入的字符串和字符的ASCII值,确认是否正确读取:
    move $t1, $a0          # 暂存读取到的字符
    la $a0, str1           # 打印输入的完整字符串
    li $v0, 4
    syscall
    move $a0, $t1          # 打印字符的ASCII值
    li $v0, 1
    syscall
    la $a0, endl           # 换行
    li $v0,4
    syscall
    

修正后的核心代码片段:

#reading user input
la $a0, str1
li $a1, 80
li $v0, 8
syscall

lb $a0, ($a0)   # 加载输入的第一个字符到$a0

#if 'c' or 'C' branch to convertC2F 
beq $a0 , 'c', convertC2F
beq $a0 , 'C', convertC2F

#if 'f' or 'F' branch to convertf2C
beq $a0 , 'f' , convertf2C
beq $a0, 'F'  , convertf2C

#else go to error       
j error

测试时注意:输入单个字母(c/C/f/F)后直接回车,再输入温度数值即可正常执行转换逻辑。

内容的提问来源于stack exchange,提问作者Googly Goof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:35:27