EMU8086将32位数字除以16位数字会产生意外的0余数

问题描述

我试图使用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中的输出

enter image description here

解决方法

这似乎是EMU8086中的错误。无符号除法(DIV)不会被零除。您将0x8A32F4D5除以0xC9A5的余数为0x94B6是正确的。为了验证这一点,我在DOSBOX中使用Turbo Debugger运行了此代码,并获得了预期的结果:

enter image description here

如果使用IDIV指令对此符号进行了除法运算,则由于除法运算溢出,将产生除以零的异常。