You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:44:54