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

标签 assembly x86 x86-16 emu8086 integer-division

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

enter image description here

最佳答案

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

enter image description here

如果这是使用 IDIV 签署的部门由于除法溢出,它会产生被零除的异常指令。

关于assembly - EMU8086 将 32 位数字除以 16 位数字给出意外的 0 余数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64717694/

相关文章:

assembly - 静态链接有什么用?

计算 cmp 中汇编的实际地址

assembly - 在 x86 实模式汇编中编写中断处理程序

c++ - 如何强制 GCC 以线性方式转换 volatile 内联汇编语句?

linux - 哪个 Linux 进程处理系统调用?

assembly - 80286 : Which is the fastest way to multiply by 10?

c++ - 使用 x86 汇编的信号量实现

c++ - 如何检查CPUID(EAX=14H,ECX=0)?

assembly - 在 DOSBox 中打开文件句柄会清除文件的数据

assembly - 在 Assembly 中同时生成 2 个随机整数