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

汇编DIV指令执行9801除以10时出现溢出错误求助

解决8086汇编除法溢出问题

你的问题出在8位除法指令的商范围限制上:

  • 使用DIV BL时属于8位除法操作:被除数是AX寄存器,除数是BL,计算后商存储在AL(8位寄存器,最大值为255),余数存储在AH。
  • 9801 ÷ 10 的商是980,远大于AL能容纳的最大值255,因此触发除法溢出中断(INT 0),也就是你看到的错误。

修正方案:使用16位除法指令

改用DIV BX执行16位除法,此时被除数是DX:AX(DX存高16位,AX存低16位),除数是BX,商存储在AX(16位,最大值65535),余数存储在DX,完全能容纳980这个商。

修正后的代码如下:

.MODEL SMALL
.DATA
.CODE
.STARTUP
    MOV AX, 9801d   ; 被除数低16位存入AX
    MOV DX, 0d      ; 被除数高16位清零(9801是16位以内的数)
    MOV BX, 10d     ; 除数存入BX

    DIV BX          ; 16位除法:DX:AX ÷ BX,商在AX,余数在DX
END

补充说明

如果后续需要处理更大的数值,只要确保商不超过AX的16位范围(0~65535),就可以用这种16位除法方式。如果商超过65535,则需要考虑手动实现除法逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:34