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

单数字素数判断汇编代码问题:输入9误判为素数求解析

问题分析:输入9时jz end未触发的原因

你的代码核心问题是循环中执行除法前没有重置被除数ax为原始数字,导致后续除法计算使用了错误的被除数,余数始终不为0,jz end无法触发。

输入9的错误执行流程拆解

  1. 输入9后,程序将ASCII码转为数字9,存入dx和ax,初始化bl=2。
  2. 首次除法div bl:9÷2得到商4、余数1,随后设置循环次数cl=4,重置ax=9,dec cl后循环次数为3。
  3. 进入循环l1:
    • 第一次循环:div bl(bl=2),此时ax仍是9,余数1≠0,bl自增到3,循环次数减为2,继续循环。
    • 第二次循环:未重置ax,此时ax是上一次除法的结果(商4+余数1,即ax=0x0104=260)。用260÷3得到余数2≠0,bl自增到4,循环次数减为1,继续循环。
    • 第三次循环:ax还是260,260÷4余数2≠0,bl自增到5,循环次数减为0,循环结束。
  4. 循环结束后执行素数输出逻辑,导致9被误判为素数。

修复方法

在循环标签l1后,先将ax重置为存储原始数字的dx,再执行除法:

l1:mov ax, dx   ; 每次循环前重置ax为原始数字
    div bl
    cmp ah,00h
    jz end
    inc bl
    dec cl
    jnz l1

修改后,每次循环都会用原始数字9除以当前的bl:当bl=3时,9÷3余数为0,cmp ah,0成立,触发jz end,跳去输出“Number is not prime”,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:57:02