【问题标题】:EMU8086 dividing 32 bit number by a 16 bit number gives unexpected 0 remainderEMU8086 将 32 位数除以 16 位数给出意外的 0 余数
【发布时间】:2020-11-06 15:47:42
【问题描述】:

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

【问题讨论】:

  • 你找到对你有价值的答案了吗?

标签: assembly x86 x86-16 emu8086 integer-division


【解决方案1】:

这看起来像是 EMU8086 中的一个错误。这个无符号除法没有被零除,也没有溢出 (DIV)。您是正确的,0x8A32F4D5 除以 0xC9A5 余数为 0x94B6。为了验证这一点,我在 DOSBOX 中使用 Turbo Debugger 运行了这段代码并得到了预期的结果:

如果使用IDIV 指令对其进行有符号除法,则会因为除法溢出而产生除零异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多