LMC中实现总和除以输入数量取商(忽略余数)的技术求助
LMC代码整合:实现总和除以数量取商(忽略余数)
需求:
- 计算输入数字的总和,除以输入数字的个数,结果取商(忽略余数)
- 示例:
- 总和10、输入2个数字 → 结果5
- 总和14、输入3个数字 → 结果4
- 总和16、输入3个数字 → 结果5
问题:不清楚如何将上述除法逻辑整合到现有代码中,避免冲突。现有代码如下:
START INP BRZ SLUTT ADD sum STA sum LDA antall ADD en STA antall BRP START SLUTT LDA sum OUT LDA linjeskift OTC OTC OTC LDA n OTC LDA likhetstegn OTC LDA antall OUT LDA linjeskift OTC OTC OTC LDA d OTC LDA likhetstegn OTC start LDA sum BRZ slutt SUB antall STA sum LDA resultat ADD en STA resultat BRP start slutt LDA resultat OUT HLT sum DAT resultat DAT 0 antall DAT 0 en DAT 1 a DAT 97 d DAT 100 n DAT 110 linjeskift DAT 13 likhetstegn DAT 61
现有代码的冲突点分析
- 标签重复:LMC对标签大小写不敏感,
START和start、SLUTT和slutt会被识别为同一个标签,导致跳转逻辑混乱。 - 变量被覆盖:除法逻辑直接修改了已经输出的
sum变量,破坏了原始总和数据。 - 边界情况未处理:如果用户直接输入0(没有输入任何有效数字),
antall为0,除法会陷入无限循环。
修改后的代码(整合除法逻辑且无冲突)
START INP BRZ CALC_DIV ; 输入0时进入计算分支 ADD sum STA sum LDA antall ADD en STA antall BRP START CALC_DIV ; 重命名标签避免冲突 ; 输出总和 LDA sum OUT ; 输出换行和"n=" LDA linjeskift OTC OTC OTC LDA n OTC LDA likhetstegn OTC ; 输出数量 LDA antall OUT ; 输出换行和"d=" LDA linjeskift OTC OTC OTC LDA d OTC LDA likhetstegn OTC ; 处理数量为0的情况(避免除以0) LDA antall BRZ DIV_END ; 数量为0时直接结束除法计算 ; 复制sum到临时变量,避免修改原始sum LDA sum STA temp_sum DIV_LOOP ; 重命名除法循环标签 LDA temp_sum BRZ DIV_END SUB antall BRN DIV_END ; 不够减时停止循环 STA temp_sum LDA resultat ADD en STA resultat BRP DIV_LOOP DIV_END LDA resultat OUT HLT sum DAT temp_sum DAT 0 ; 新增临时变量保存总和副本 resultat DAT 0 antall DAT 0 en DAT 1 a DAT 97 d DAT 100 n DAT 110 linjeskift DAT 13 likhetstegn DAT 61
修改说明
- 标签重命名:将重复的
start/slutt改为DIV_LOOP/DIV_END,SLUTT改为CALC_DIV,避免标签冲突。 - 新增临时变量:用
temp_sum保存原始总和,除法操作只修改临时变量,保留sum的原始值。 - 边界处理:增加
antall为0的判断,直接跳过除法计算,避免错误。 - 优化除法逻辑:当
temp_sum减去antall后结果为负时,直接终止循环,确保取商正确(忽略余数)。
内容的提问来源于stack exchange,提问作者ali03
相关产品推荐
相关产品推荐

