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

MARIE代码运算符逻辑错误:加法变减法、其余运算异常排查

MARIE汇编运算逻辑错误分析与修复

问题核心原因

你的代码出现运算逻辑颠倒的问题,本质是运算符判断分支的条件匹配错误,具体表现为:

  • 加法判断的分支条件未正确触发,导致输入+时跳转到了减法执行代码
  • 减法、乘法、除法的判断条件失效,使得这三种运算符的输入都落入了加法执行的默认分支

常见触发点:

  • Skipcond指令的条件码使用错误(比如用000/200代替100判断相等)
  • 跳转标签与运算逻辑对应颠倒(比如判断+后跳转到减法标签)
  • 运算符比较的减法顺序搞反(比如用常量减运算符而非运算符减常量,导致相等判断时AC值不为0)

修复步骤

1. 明确MARIE判断逻辑

MARIE的Skipcond XYY指令中,X代表判断规则:

  • 0:AC < 0 时跳过下一条指令
  • 1:AC = 0 时跳过下一条指令
  • 2:AC > 0 时跳过下一条指令

判断运算符匹配的标准逻辑:加载输入运算符 → 减去目标运算符的ASCII值 → 用Skipcond 100判断AC是否为0(即运算符相等)

2. 修正运算符判断分支

以下是标准判断逻辑示例(假设已定义存储输入数的Num1、Num2,存储运算符的Op,以及各运算符常量):

; 定义运算符ASCII常量
OnePlus,  DEC 43   ; '+'的ASCII值
OneMinus, DEC 45   ; '-'的ASCII值
OneMult,  DEC 42   ; '*'的ASCII值
OneDiv,   DEC 47   ; '/'的ASCII值

; 开始判断运算符
StartJudge,
    Load Op
    Sub OnePlus
    Skipcond 100   ; 若AC=0(Op是'+'),跳过下一条Jump指令
    Jump CheckMinus
    Jump DoAdd     ; 匹配加法,跳转到加法执行

CheckMinus,
    Load Op
    Sub OneMinus
    Skipcond 100
    Jump CheckMult
    Jump DoSub     ; 匹配减法,跳转到减法执行

CheckMult,
    Load Op
    Sub OneMult
    Skipcond 100
    Jump CheckDiv
    Jump DoMult    ; 匹配乘法,跳转到乘法执行

CheckDiv,
    Load Op
    Sub OneDiv
    Skipcond 100
    Jump InvalidOp ; 不匹配任何运算符,跳转到错误处理
    Jump DoDiv     ; 匹配除法,跳转到除法执行

; 各运算执行逻辑
DoAdd,
    Load Num1
    Add Num2
    Jump OutputResult

DoSub,
    Load Num1
    Sub Num2
    Jump OutputResult

DoMult,
    ; MARIE无乘法指令,循环累加实现
    Load Num2
    Store Counter
    Load Zero
    Store Result
MultLoop,
    Load Result
    Add Num1
    Store Result
    Load Counter
    Sub One
    Store Counter
    Skipcond 000
    Jump MultLoop
    Load Result
    Jump OutputResult

DoDiv,
    ; MARIE无除法指令,循环减法实现
    Load Num1
    Store Dividend
    Load Zero
    Store Result
DivLoop,
    Load Dividend
    Sub Num2
    Skipcond 000   ; 被除数<除数时停止循环
    Jump DivEnd
    Store Dividend
    Load Result
    Add One
    Store Result
    Jump DivLoop
DivEnd,
    Load Result
    Jump OutputResult

InvalidOp,
    ; 错误处理:输出提示或终止
    Halt

OutputResult,
    Output
    Halt

; 辅助变量
Zero,   DEC 0
One,    DEC 1
Counter,DEC 0
Result, DEC 0
Dividend,DEC 0

3. 额外检查点

  • 确认输入的运算符被正确存储到Op变量(输入用Input指令,未被后续操作覆盖)
  • 验证乘法、除法的自定义循环逻辑,避免循环错误导致结果异常
  • 移除默认加法分支,所有判断失败后跳转到错误处理而非执行加法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:04:53