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

为何我的MIPS程序无法正确输出目标寄存器$t0的值?

问题分析与修复

你的程序直接结束无输出的核心原因是循环条件判断逻辑错误,导致循环体完全没执行就进入了结束流程。

错误点拆解

在loop标签下的判断指令:

bge $t4, $t5, end

$t4存储的是数组元素总数10,$t5是初始为0的循环计数器。10 >= 0的判断结果为真,程序会直接跳转到end标签,根本不会遍历数组。此时$t0保持初始的0值,后续执行sgt $t0, $t0, $zero后仍为0,虽然会触发打印,但结果不符合预期,且你可能误以为无输出。

修复后的完整代码

将循环条件改为当计数器大于等于数组长度时退出循环:

.data
list:   .word 1, 2, -3, 4, 5, 6, 81, 7, 8, 9

.text
main:
    la $a1, list
    li $a3, 81
    move $t0, $zero

    li $t4, 10  # 数组元素个数
    li $t5, 0   # 循环计数器

    j loop

loop:
    bge $t5, $t4, end  # 修正条件:计数器>=元素总数时退出循环

    lw $a2, 0($a1)

    seq $t1, $a2, $a3
    add $t0, $t0, $t1

    addi $a1, $a1, 4
    addi $t5, $t5, 1

    j loop

end:
    sgt $t0, $t0, $zero  # 将累计结果转为0/1:找到过81则为1,否则为0

    li $v0, 1
    move $a0, $t0
    syscall

可选优化

如果想提升效率,可在找到目标值后直接跳出循环,无需遍历剩余元素:在add $t0, $t0, $t1之后添加一句bne $t1, $zero, end,一旦匹配到81就直接进入结束逻辑。

内容的提问来源于stack exchange,提问作者m. lekk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:10:21