对于x86 div操作,有人可以帮助你理解为什么当操作数/股息大小为双字时而不使用EAX寄存器,而不是将其拆分为DX:AX寄存器吗?
在这里给出:https : //c9x.me/x86/html/file_module_x86_id_72.html
与标志有关吗?
谢谢!
这是历史。那就是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位,则会出现异常。
我猜这也是为什么苹果的手臂在x86上拥有如此优势的设计选择原因之一?(只是一个业余猜测)
@Alterecho不是,不是。主要原因是他们花了很多钱才能完成流程,并设计出了数量众多的执行单元和广泛的前端。英特尔可以做更多的工作。
@fuz哦,是的,我也忘记了该过程。14nm和M1的5nm 芯片上的统一内存RAM!快速SSD的快速交换!我认为AMD的智能访问内存技术非常接近于UMA架构的构想!