Marie汇编语言输入最值输出问题:最小值始终为0的解决求助
问题分析与修复方案
你的代码最小值始终输出0,核心问题是初始的Smallest设为0,且未处理第一个输入值的初始化逻辑:当所有输入数都大于0时,Value - Smallest结果始终为正,SKIPCOND 800(判断结果为负)永远不会触发,导致Smallest一直保持初始0值。同理,若第一个输入数为负数,当前逻辑也无法正确更新最大值。
修复后的代码
ORG 100 Loop, Input STORE Value LOAD Count ADD One STORE Count // 判断是否为第一次输入(Count=1),初始化最小/最大值 LOAD Count SUBT One SKIPCOND 000 // 若Count=1(AC=0),跳过后续跳转,执行初始化 JUMP CheckMinMax InitFirstValue, LOAD Value STORE Smallest STORE Largest JUMP Continue CheckMinMax, CheckMin, LOAD Value SUBT Smallest SKIPCOND 800 // 若Value < Smallest(结果为负),跳过跳转,更新最小值 JUMP CheckMax LOAD Value STORE Smallest CheckMax, LOAD Value SUBT Largest SKIPCOND 400 // 若Value > Largest(结果为正),跳过跳转,更新最大值 JUMP Continue LOAD Value STORE Largest Continue, LOAD Count SUBT Seven SKIPCOND 400 // 若Count>7(已输入8个数),跳过跳转,进入打印 JUMP Loop Print, LOAD Smallest Output LOAD Largest Output HALT Value, Dec 0 Count, Dec 0 Smallest, Dec 0 Largest, Dec 0 One, Dec 1 Seven, Dec 7 END
关键修改说明
- 添加首次输入初始化:当输入第一个数后
Count变为1,此时直接将该值赋值给Smallest和Largest,确保后续比较基于真实输入值,而非初始0。 - 修正循环结束判断:将
SKIPCOND 800改为SKIPCOND 400,当Count>7(已完成8次输入)时,跳过JUMP Loop,进入打印逻辑,避免循环次数错误。 - 优化判断逻辑:通过
SKIPCOND 000精准判断首次输入场景,跳过无效的比较步骤,提升代码效率。
你之前修改Smallest初始值无效,是因为无法覆盖所有输入场景(比如输入全为负数时,初始值设为0就会出问题),用第一个输入值初始化才是通用解决方案。
内容的提问来源于stack exchange,提问作者Code_guy
相关产品推荐
相关产品推荐

