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

基于MIPS16指令的迭代运算程序调试求助

MIPS16程序错误排查与修正

你的需求是遍历1到10的数字,奇数加2、偶数乘4,最终将所有处理结果求和并存入内存。以下是原程序的核心错误及修正方案:

原程序核心错误

  • 数字来源逻辑错误:原程序通过lw $3,1($2)从内存读取待处理数字,但未预先将1-10写入内存,导致处理的是随机垃圾值。无需从内存读入,直接用循环变量生成1-10即可。
  • 奇偶判断完全失效:原程序用addi $1,$1,1后执行beq $1,$0,3,这是判断循环变量是否为0,完全无法区分奇偶。正确的做法是提取数字最低位(奇数最低位为1,偶数为0)。
  • 求和遗漏奇数结果:原程序仅在偶数分支执行求和操作,奇数分支跳转后跳过了求和步骤,导致奇数处理后的数值未被计入总和。
  • 循环变量与流程混乱:
    • 循环初始$1=0,但需要处理1-10,初始值应设为1;
    • 奇数分支已执行addi $1,$1,1,后续又重复执行一次,导致循环变量每次递增2,无法遍历所有数字;
    • 跳转目标错误,beq $1,$4,7在循环结束时跳转到addi $1,$1,1会引发死循环。

修正后的程序

addi $1, $0, 1       # i = 1,初始化第一个待处理数字
addi $4, $0, 11      # 循环终止条件:i >= 11时结束(遍历1-10)
add $5, $0, $0       # sum = 0,初始化总和

loop:
    beq $1, $4, exit # 若i等于11,跳转到结束逻辑
    andi $6, $1, 1   # 提取i的最低位,$6=1为奇数,0为偶数
    beq $6, $0, even # 偶数分支跳转

# 奇数处理:加2
addi $3, $1, 2       # 奇数i加2,结果存$3
j update_sum         # 跳转到求和步骤

even:
    sll $3, $1, 2    # 偶数乘4(左移2位等价于乘4)

update_sum:
    add $5, $5, $3   # 将处理后的数值加到总和
    addi $1, $1, 1   # 循环变量i自增1
    j loop           # 跳回循环开头

exit:
    sw $5, 0x10($0)  # 将总和存储到内存地址0x10处(可按需修改地址)

修正说明

  1. 直接用循环变量$1生成1-10的数字,无需依赖内存初始值;
  2. 用andi $6,$1,1正确判断奇偶;
  3. 统一求和逻辑,奇数、偶数处理后均进入求和步骤,确保所有结果被计入总和;
  4. 调整循环初始值与终止条件,保证完整遍历1-10;
  5. 简化跳转逻辑,让循环结构清晰易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:22:24