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

MIPS分支语句失效求助:7×5二进制数组图形绘制逻辑异常

问题排查:分支语句被忽略的原因及修复方案

我来帮你定位这个问题!你遇到的分支_draw_arena被忽略的核心原因是你错误地将内存地址和数值1做了比较,而不是读取地址中存储的数组元素值。

错误点分析

看你的这段代码:

beq t2, 1, _draw_arena

这里的t2是通过add t2, a0, t1计算出来的,它指向arena数组中第[s0][s1]个元素的内存地址,而不是该位置存储的0或1。由于arena的起始地址a0肯定远大于1,这条beq指令永远不会成立,所以分支会被直接跳过,自然不会执行_draw_arena的逻辑。

修复方案

你需要先从t2指向的内存地址中加载实际存储的数值,再和1做比较。修改后的代码如下:

bge s1, 5, _increment_outer_loop
la a0, arena
mul t0, s0, 28 #i
mul t1, s1, 4 #j
add t1, t1, t0
add t2, a0, t1
lw t3, 0(t2)   # 从t2指向的内存地址加载4字节数据到t3寄存器
beq t3, 1, _draw_arena  # 现在比较的是数组元素的实际值
j _increment_inner_loop

补充说明

从你用mul t1, s1, 4计算偏移量可以看出来,你的arena数组每个元素占4字节(应该是32位整数类型),所以用lw(加载字)指令是正确的。如果你的数组是单字节存储的,那应该改用lb(加载字节)指令,但这里的偏移计算逻辑对应4字节元素,所以lw是合适的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:52:40