Warm tip: This article is reproduced from serverfault.com, please click

assembly-x86 ASM div股息登记职业

(assembly - x86 ASM div dividend register occupation)

发布于 2020-12-03 03:43:19

对于x86 div操作,有人可以帮助你理解为什么当操作数/股息大小为双字时而不使用EAX寄存器,而不是将其拆分为DX:AX寄存器吗?

在这里给出:https : //c9x.me/x86/html/file_module_x86_id_72.html

与标志有关吗?

谢谢!

Questioner
Alterecho
Viewed
0
Nate Eldredge 2020-12-03 11:56:36

这是历史。那就是16位8086所做的,因为它没有32位寄存器。当引入32位80386时,它的主要“功能”之一就是与8086的向后兼容性:它可以以“真实”或“虚拟8086”模式运行8086代码。

因此80386 CPU必须支持一条指令,该指令在两个16位寄存器之间进行了32位除法运算,以用于real / v86模式。因此,它也可能在32位保护模式下使用相同的行为,而不是使用更多的晶体管来实现另一种形式。无论如何,在386和8086之间具有尽可能多的相似性通常是Intel的理念之一,即使这导致了一些尴尬的选择,而这些选择对于普通的32位计算机而言是没有意义的。(35年后,我们仍在为许多选择付费)。

在32位或64位模式下,你可能更喜欢将32位除数放入eax,零输出edx并执行64-> 32位div(四字/双字操作数大小),而不是使用此格式这也使你可以得到完整的32位结果,这样就不会溢出。而使用32-> 16 bit时div,如果结果不适合16位,则会出现异常。