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

MARIE汇编实现加减乘除时除法模块返回错误值的问题排查

MARIE汇编实现加减乘除时除法模块返回错误值的问题排查

看起来你在MARIE汇编的除法实现里踩了两个关键逻辑坑,导致输出的不是计算好的商,而是初始输入的x值。咱们一步步拆解问题,再给你修正后的代码:

问题1:除法循环的条件判断逻辑搞反了

MARIE的Skipcond指令规则是:

  • Skipcond 800:当AC>0时跳过下一条指令
  • Skipcond 400:当AC=0时跳过下一条指令
  • Skipcond 000:当AC<0时跳过下一条指令

你原来的代码里,执行Subt y后用Skipcond 800,意思是如果x-y>0才跳去累加商,但实际上我们需要的是:只要x-y≥0(还能减)就累加商,只有当x-y<0(不够减了)才退出循环。你的条件判断正好搞反了,导致循环的退出时机不对。

问题2:输出阶段的逻辑完全错误

你在输出部分写了:

output, Load x
Store quotient
Load quotient
Output

这相当于把当前的x(此时是除法的余数)覆盖了之前计算好的quotient,然后输出这个被覆盖后的值——这就是为什么你看到返回的是x的原因!完全搞反了输出对象。另外,output这个标签和MARIE的Output指令重名,容易引发混淆,建议改成output_div这类独特的名字。


修正后的除法模块代码

/ Division
Load zero 
Store quotient       ; 初始化商为0
divloop, Load x      ; 加载当前被除数x
Subt y               ; 计算x - y
Skipcond 000         ; 如果AC < 0(x < y,不够减了),跳过下一条指令
Jump Adding          ; 够减,跳去累加商
Jump output_div      ; 不够减,跳去输出商
Adding, Store x      ; 把减后的结果存回x(此时x = x - y ≥ 0)
Load quotient
Add one              ; 商加1
Store quotient
Jump divloop         ; 回到循环继续减
/Output of Division
output_div, Load quotient  ; 加载计算好的商值
Output               ; 输出商

修正后的逻辑说明

  1. 先初始化商quotient为0
  2. 循环里不断用x减y,每次够减(x-y≥0)就把结果存回x,同时商加1
  3. 当x-y<0时,退出循环,直接输出之前累加好的quotient(也就是除法的商)
  4. 如果需要输出余数,你可以在输出商之后再加一段加载x并输出的逻辑

备注:内容来源于stack exchange,提问作者user22410271

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:39:31