我试图使用 emu8086 工具将 (Unsigned) 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中的输出:
最佳答案
这看起来像是 EMU8086 中的错误。这个无符号除法 ( DIV ) 没有被零除,也没有溢出。你是正确的,0x8A32F4D5 除以 0xC9A5 的余数是 0x94B6。为了验证这一点,我在 DOSBOX 中使用 Turbo Debugger 运行了这段代码并得到了预期的结果:
如果这是使用 IDIV 签署的部门由于除法溢出,它会产生被零除的异常指令。
关于assembly - EMU8086 将 32 位数字除以 16 位数字给出意外的 0 余数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64717694/