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

MIPS汇编实现数组最大值查询程序触发无限循环问题求助

问题原因及修复方案

核心错误(导致无限循环)

你在参数传递阶段使用了错误的加载指令:

  • main函数中获取数组长度的代码为la $a0 N,la是加载地址指令,执行后$a0中存储的是标签N对应的内存地址,而非N中存储的数组长度值8。
  • max函数中你把$a0的值赋值给了$t0作为循环终止的判断阈值,循环计数变量$t2是从1开始自增的小整数,永远不可能等于远大于8的内存地址值,因此循环永远不会触发退出条件,进入无限循环。
  • 修复方式:将main中的la $a0 N修改为lw $a0 N,lw是加载字数据指令,会读取N地址中存储的数值8到$a0,循环判断逻辑就可以正常工作。

可选适配优化

  • 部分MIPS汇编器要求指令的多个操作数之间用逗号分隔,你当前代码中所有指令都省略了逗号,如果你使用的汇编器编译时报错,可以给操作数之间补全逗号,例如改为move $t0, $a0、addi $t2, $t2, 1即可。
  • 按照MIPS寄存器使用规范,$s系列寄存器属于被调用者保存寄存器,如果你后续扩展代码逻辑,建议在main函数开头先把用到的$s0寄存器值压栈保存,函数返回前再出栈恢复,避免寄存器值污染。

修改后的核心代码片段如下:

main:
    # 修复加载数组长度的指令
    lw $a0 N
    la $a1 A
    
    jal max
    move $s0 $v0
    
    # 后续原有逻辑保持不变即可

修复完成后运行程序会正常输出结果:The max value is: 100。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 16:54:02