EMU8086 将 32 位数除以 16 位数给出意外的 0 余数

Posted

技术标签:

【中文标题】EMU8086 将 32 位数除以 16 位数给出意外的 0 余数【英文标题】:EMU8086 dividing 32 bit number by a 16 bit number gives unexpected 0 remainder 【发布时间】: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 中的输出:

【问题讨论】:

你找到对你有价值的答案了吗? 【参考方案1】:

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

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

【讨论】:

以上是关于EMU8086 将 32 位数除以 16 位数给出意外的 0 余数的主要内容,如果未能解决你的问题,请参考以下文章

CPU位数操作系统位数及如何在Linux下查看

8080、8088、80286、80386CPU的数据总线分别为16跟,20根,24根,32根,为

emu8086的软件简介

除以整数位数的幂

认识emu8086仿真内存

Emu8086 - 无法打开文件