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中的输出:
这看起来像是 EMU8086 中的一个错误。不存在被零除的情况,也不存在此无符号除法 ( DIV )的溢出。您是正确的,0x8A32F4D5 除以 0xC9A5 余数为 0x94B6。为了验证这一点,我在 DOSBOX 中使用 Turbo Debugger 运行了这段代码,并得到了预期的结果:
如果使用IDIV指令进行有符号除法,则会因除法溢出而产生除零异常。