如何修复LMC除法程序无限循环问题并正确输出商和余数
LMC除法程序问题修复与优化方案
原有代码核心故障点
- 商
Q初始值错误:初始赋值为99而非0,导致商计算结果完全错误 - 循环跳出条件缺失:第一个循环仅判断被除数
NUM1为0时跳出,当NUM1减NUM2结果为负时没有跳出逻辑,直接触发无限循环 - 执行路径断裂:第一个循环的无条件跳转
BRA LOOP始终跳回循环开头,后续计算乘积、余数的代码永远无法被执行 - 指令语法错误:使用了LMC指令集不存在的
LOAD指令,正确加载指令为LDA;OUT指令无需操作数,仅会输出累加器当前存储的值,编写OUT Q属于语法错误 - 逻辑冗余:额外增加乘法再求余数的步骤完全没有必要,减法循环结束后剩余的被除数本身就是余数
最简优化实现方案
直接通过减法循环同时计算商和余数,不需要额外的乘法步骤,代码如下:
INP ; 输入被除数 STA NUM1 INP ; 输入除数 STA NUM2 BRZ END ; 除数为0直接结束,可根据需求补充异常输出 LDA 0 ; 初始化商为0 STA Q LOOP LDA NUM1 SUB NUM2 ; 尝试减去除数 BRP CONT ; 结果非负说明可以继续减 BRA OUTPUT ; 结果为负,跳出循环输出 CONT STA NUM1 ; 更新被除数为减后的值 LDA Q ADD ONE ; 商+1 STA Q BRA LOOP OUTPUT LDA Q OUT ; 输出商 LDA NUM1 OUT ; 输出余数 END HLT NUM1 DAT NUM2 DAT Q DAT ONE DAT 1
上述代码逻辑验证:以输入被除数5、除数2为例,循环结束后Q值为2,NUM1剩余值为1,输出结果符合预期,无冗余运算,不会出现无限循环问题。
内容的提问来源于stack exchange,提问作者Ian K
相关产品推荐
相关产品推荐

