问题
I was trying to divide (Unsigned) 8A32F4D5 by C9A5 using emu8086 tool. I expected the quotient to be AF73H and the remainder be 94B6H. After writing the following code, I was getting correct quotient but the remainder became 0000h. Am I missing something?
.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
The output in EMU8086:
回答1:
This looks like a bug in EMU8086. There is no division by zero nor is there an overflow with this unsigned division (DIV). You are correct that 0x8A32F4D5 divided by 0xC9A5 has a remainder of 0x94B6. To verify this I ran this code with Turbo Debugger in DOSBOX and got the expected results:
Had this been signed division using the IDIV instruction it would produce a division by zero exception because of division overflow.
来源:https://stackoverflow.com/questions/64717694/emu8086-dividing-32-bit-number-by-a-16-bit-number-gives-unexpected-0-remainder