EMU8086 将 32 位数字除以 16 位数字给出意外的 0 余数

Muj*_*kon 3 x86 assembly integer-division x86-16 emu8086

我试图使用 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 
Run Code Online (Sandbox Code Playgroud)

EMU8086中的输出:

在此输入图像描述

Mic*_*tch 5

这看起来像是 EMU8086 中的一个错误。不存在被零除的情况,也不存在此无符号除法 ( DIV )的溢出。您是正确的,0x8A32F4D5 除以 0xC9A5 余数为 0x94B6。为了验证这一点,我在 DOSBOX 中使用 Turbo Debugger 运行了这段代码,并得到了预期的结果:

在此输入图像描述

如果使用IDIV指令进行有符号除法,则会因除法溢出而产生除零异常。