Assembly EMU8086将32位数字除以16位数字得到意外的0余数
我试图用emu8086工具将(未签名的)8A32F4D5除以C9A5。我希望商是AF73H,其余的商是94B6H。在编写了以下代码之后,我得到了正确的商,但剩余的商变成了0000h。我错过什么了吗Assembly EMU8086将32位数字除以16位数字得到意外的0余数,assembly,x86,x86-16,emu8086,integer-division,Assembly,X86,X86 16,Emu8086,Integer Division,我试图用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
.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中的输出:
这看起来像是EMU8086中的一个bug。此无符号除法()没有被零除法,也没有溢出。0x8A32F4D5除以0xC9A5的余数为0x94B6,这是正确的。为了验证这一点,我在DOSBOX中使用Turbo调试器运行了这段代码,并获得了预期的结果:
如果这是使用指令签名的除法,由于除法溢出,它将产生一个零除法异常。您找到任何值的答案了吗?