MIPS分支语句失效致无限循环:小于输入值的偶数求和程序异常
MIPS汇编无限循环问题修复
核心错误原因
你代码中$t0寄存器存储的是.data段中变量N的内存地址,而非用户输入的整数值。后续所有$t0和迭代变量$t1的比较操作,本质是在拿内存地址和偶数迭代值对比,完全不符合业务逻辑,因此永远触发不了跳出循环的分支条件。
修复方案
- 在将用户输入存入
N变量后,新增指令lw $t0, 0($t0),将N对应的整数值加载到$t0寄存器中即可。
修复后完整代码
.data N: .word 0 Result: .word 0 .text .globl main initialize: li $v0, 5 # 获取用户输入整数 syscall la $t0, N sw $v0, 0($t0) lw $t0, 0($t0) # 新增:将N的数值加载到$t0,而非保留地址 li $t1, 2 li $t2, 0 main: blt $t0, $t1, fin2 fori: add $t2, $t2, $t1 # t2 += t1 add $t1, $t1, 2 # t1 += 2 slt $t5, $t1, $t0 bne $t5, $zero, fori fin: li $v0,1 # 输出计算结果 move $a0, $t2 syscall li $v0, 10 syscall fin2: li $v0,1 # 输入小于2时输出0 move $a0, $zero syscall li $v0, 10 syscall
验证效果
输入7时,程序会计算2+4+6=12并正常输出,循环到$t1为8时自动触发跳出条件,不会出现无限循环问题。
内容的提问来源于stack exchange,提问作者Caleb Ernst
相关产品推荐
相关产品推荐

