EMU8086 将 32 位数除以 16 位数给出意外的 0 余数
Posted
技术标签:
【中文标题】EMU8086 将 32 位数除以 16 位数给出意外的 0 余数【英文标题】:EMU8086 dividing 32 bit number by a 16 bit number gives unexpected 0 remainder 【发布时间】:2020-11-06 15:47:42 【问题描述】:我试图使用 emu8086 工具将(无符号)8A32F4D5 除以 C9A5。我预计商为 AF73H,余数为 94B6H。编写以下代码后,我得到了正确的商,但余数变为 0000h。我错过了什么吗?
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
; initialize DS
MOV AX,@DATA
MOV DS,AX
; enter your code here
MOV DX, 8A32H
MOV AX, 0F4D5H
MOV BX, 0C9A5H
DIV BX
;exit to DOS
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN
EMU8086 中的输出:
【问题讨论】:
你找到对你有价值的答案了吗? 【参考方案1】:这看起来像是 EMU8086 中的一个错误。这个无符号除法没有被零除,也没有溢出 (DIV)。您是正确的,0x8A32F4D5 除以 0xC9A5 余数为 0x94B6。为了验证这一点,我在 DOSBOX 中使用 Turbo Debugger 运行了这段代码并得到了预期的结果:
如果使用IDIV 指令对其进行有符号除法,则会因为除法溢出而产生除零异常。
【讨论】:
以上是关于EMU8086 将 32 位数除以 16 位数给出意外的 0 余数的主要内容,如果未能解决你的问题,请参考以下文章