汇编语言中的32位除法

时间:2014-01-27 12:50:45

标签: assembly

我正在大学课程(80386编程)学习汇编语言编程。目前,我正在学习使用EDX和EAX寄存器分别存储余数和商的32位除法的来龙去脉。我想知道,当我不包括

时,为什么我没有得到正确的输出
mov edx, 00000000h

在我的程序中。该程序要么不运行,要么输出错误。

相关源代码:

mov edx, 00000000h
mov eax, 1234567Ah
div 11111111h ; now EDX=remainder, EAX=quotient

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

2 个答案:

答案 0 :(得分:4)

DIV与32位操作数一起使用时,它将除以EDX:EAX中的64位值(EDX中的高位DWORD,EAX中的低位DWORD)通过操作数将商数放在EAX中,将余数放在EDX中。

因此,如果要分割的值为32位(仅适用于EDX),则应在分割前清除EAX。如果商不符合EAX,则不这样做会导致错误的结果,或者除法溢出。

答案 1 :(得分:1)

32位div实际上将edx:eax除以指定值。如果edx中有随机垃圾,你会得到垃圾结果。没有选择将JUST与eax分开......