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

如何在MIPS实现的二重求和代码中移除内层循环的+1运算

问题分析

原代码中addi $t2, $t2, 1就是对应求和式里的+1运算,执行逻辑如下:

  • $t0 存储外层循环的a计数器,取值1~3
  • $t1 存储内层循环的b计数器,取值1~3
  • 先通过add $t2, $t1, $t0计算得到a+b的结果
  • 再通过addi指令给结果加1,得到单轮循环的项值,再累加到累加寄存器$t3中
修改方案

方案1:等价数学变换预加总偏移

原二重循环共有3*3=9项,每项都加1的总偏移为9,无需修改循环逻辑,修改两处即可:

  • 移除addi $t2, $t2, 1这行代码
  • 累加器$t3初始化时赋值为9(或在输出结果前给$t3加9)
    注意:原代码没有显式初始化$t3,建议补充li $t3, 0或对应初始值,避免寄存器初始垃圾值干扰结果

方案2:调整循环取值范围消去+1运算

利用式子等价变换a + b +1 = a + (b+1),将内层b的取值整体+1,从原13调整为24,直接用a+b的结果就等于原项值,修改步骤:

  1. 移除addi $t2, $t2, 1这行代码
  2. 主函数中内层计数器初始化语句li $t1, 1改为li $t1, 2
  3. 内层循环跳出判断beq $t1, 4, loopa改为beq $t1, 5, loopa
  4. 外层循环重置内层计数器的语句li $t1, 1改为li $t1, 2

修改后的完整代码如下:

.text
.globl main

main:
     li $t0,1
     li $t1,2
     li $t3,0

loopb:
     beq $t1, 5, loopa
     add $t2, $t1, $t0
     add $t3, $t3, $t2
     addi $t1, $t1, 1
     j loopb
loopa:
     addi $t0, $t0, 1
     beq $t0, 4, end
     li $t1, 2 
     j loopb

end:
    move $a0, $t3
    li $v0, 1
    syscall

    li $v0, 10
    syscall 

两种方案的运行结果均为45,和原代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:36:10