汇编语言中的32位除法

gam*_*_11 0 assembly

我正在大学课程(80386编程)中学习汇编语言编程。目前,我正在使用EDX和EAX寄存器分别存储余数和商来学习32位除法的来龙去脉。我想知道,为什么不包括在内时为什么我没有得到正确的输出

mov edx, 00000000h
Run Code Online (Sandbox Code Playgroud)

在我的程序中。程序不运行或输出错误。

相关源代码:

mov edx, 00000000h
mov eax, 1234567Ah
div 11111111h ; now EDX=remainder, EAX=quotient
Run Code Online (Sandbox Code Playgroud)

如果需要,我将发布完整代码。

Mic*_*ael 5

当使用DIV带有一个32位的操作数,这将在划分的64位值EDX:EAX(在高DWORD EDX,低DWORD在EAX由操作数),并把在所述商EAX和余数中EDX

因此,EDX如果要分频的值是32位(EAX单独适合),则应在分频之前清除。否则将导致不正确的结果,或者如果商不适合则除法溢出EAX