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

如何在LMC中无需存再加载重置NEG标志并修复均值计算bug

LMC三数向下取整均值程序的Bug修复

原程序用于计算3个输入值之和的向下取整均值,代码如下:

LDA zro
    STO r
    STO cnt
    LDA t
    STO abc
lp  IN  
    STO a 
div LDA a
    SUB t
    ADD r   
    BRP x
    BRZ x
    BR  y
x   STO a    
    LDA cnt
    ADD one
    STO cnt   
    LDA zro
    STO r
    BR  div
y   ADD t
    STO r 
    LDA abc
    SUB one
    STO abc
    BRZ out
    BR  lp
out LDA cnt
    OUT
    HLT
a   DAT 000
t   DAT 003
cnt DAT 000
one DAT 001
abc DAT 003
r   DAT 000
zro DAT 000

问题现象

程序在0-999的输入范围内大部分情况正常,但部分输入会得到比预期小1的结果:比如输入4 4 2时输出2(正确结果应为3),输入596 165 2时输出253(正确结果应为254)。

Bug原因

NEG标志位未在加载新输入值前重置,导致后续的分支判断(BRP/BRZ)错误沿用了上一次循环的标志状态,最终统计的整除次数少了1。

最少指令修复方案

在lp标签后的IN指令之后、STO a指令之前,新增一条ADD zro指令(用SUB zro效果完全一致):

lp  IN  
    ADD zro  # 新增:重置标志位,不改变输入值
    STO a 

修复原理

LMC中,执行ADD zro时,累加器里刚输入的数值不会改变,但会强制重置所有标志位(包括NEG、ZERO、POS)。这样后续进入div循环时,分支判断会基于当前输入值的运算结果重新设置标志,不会受上一次循环的标志残留影响。这条指令既满足了「无需存储再加载」的要求,又只用1条指令就修复了Bug。

验证:输入4 4 2时程序会正确输出3;输入596 165 2时输出254,完全符合预期。

内容的提问来源于stack exchange,提问作者Harry Barry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:38:15