LMC程序改造需求:识别非整除并重新输入,保留整除停机功能
解决方案
你的核心问题是没在除法循环结束后判断被除数是否完全减为0,原程序不管整除与否都会直接输出商,所以我们要在循环结束后加一个判断分支:如果被除数为0,就输出商并停机;否则输出0,重置变量后重新要求输入。
修改后的完整代码如下:
RESTART INP STA DIVIDEND INP STA DIVISOR LOOP LDA DIVIDEND BRZ CHECK_DIVISIBLE ; 被除数减到0时,跳去判断是否整除 SUB DIVISOR STA DIVIDEND LDA ANSWER ADD INC STA ANSWER BRP LOOP ; 结果非负就继续减,负数说明不够减了 CHECK_DIVISIBLE LDA DIVIDEND BRZ OUTPUT_ANSWER ; 被除数为0,说明整除,输出商 ; 走到这里说明不能整除,输出0并重启 LDA ZERO OUT ; 重置所有变量,避免上一次数据干扰 STA DIVIDEND STA DIVISOR STA ANSWER BRA RESTART ; 跳回输入环节 OUTPUT_ANSWER LDA ANSWER OUT HLT ; 整除后直接停机 DIVIDEND DAT 0 DIVISOR DAT 0 ANSWER DAT 0 INC DAT 1 ZERO DAT 0
关键修改点
- 新增
RESTART标签:把输入逻辑移到这个标签下,方便不能整除时跳转回来重新输入。 - 新增
CHECK_DIVISIBLE判断分支:循环结束后先检查被除数是否为0,区分整除/非整除情况。 - 非整除分支处理:输出0后,用
ZERO变量重置所有存储单元(被除数、除数、商),然后通过BRA RESTART强制跳回输入步骤。 - 整除分支处理:直接输出商然后停机,保留原有的停机功能。
逻辑说明
- 当输入的两个数能整除时,除法循环会把被除数减到0,触发
BRZ CHECK_DIVISIBLE,再通过BRZ OUTPUT_ANSWER输出商后停机。 - 当不能整除时,除法循环会因为减到负数跳出,此时被除数不为0,进入非整除分支:输出0 → 重置变量 → 回到输入界面等待新数据。
内容的提问来源于stack exchange,提问作者Aiitn
相关产品推荐
相关产品推荐

