gpt4 book ai didi

assembly - 为什么 32 位应用程序可以在 64 位 x86 CPU 上运行?

转载 作者:行者123 更新时间:2023-12-04 18:05:50 27 4
gpt4 key购买 nike

32 位应用程序可执行文件包含 32 位 CPU 的机器代码,但 32 位和 64 位 Intel CPU 的程序集和内部架构(寄存器数量、寄存器宽度、调用约定)不同,那么 32 位 CPU 怎么可能bit exe 在 64 位机器上运行?

Wikipedia's x86-64 article says:

x86-64 is fully backwards compatible with 16-bit and 32-bit x86 code. Because the full x86 16-bit and 32-bit instruction sets remain implemented in hardware without any intervening emulation, existing x86 executables run with no compatibility or performance penalties, whereas existing applications that are recoded to take advantage of new features of the processor design may achieve performance improvements.



我不明白他们说在没有任何干预仿真的情况下在硬件中实现是什么意思。这是什么意思?

最佳答案

简短的回答是 x86 系列处理器都设计为向后兼容。在新 CPU 中执行算术和读/写操作的逻辑电路仍然能够执行为旧 CPU 设计的指令,同时还能执行新指令,如 64 位加法和减法。

如果您想了解更多历史...

x86 指令集可以追溯到 1970 年代中期,从英特尔的第一个 16 位处理器 8086 开始。 .该 CPU 上的通用 16 位(2 字节)寄存器称为 AX , BX , CX , 和 DX . 8086 还允许访问每个寄存器的高字节和低字节。例如,您可以访问 AX 的低 8 位。使用名称 AL ,或使用 AH 的高 8 位.

当英特尔开始开发具有新功能的新处理器时,他们希望它们能够向后兼容 8086 和之后出现的任何处理器。紧随其后的是 80186、80286 和 80386——最后一个是他们的第一个 32 位处理器。

当然,80386 上的所有寄存器都必须是 32 位的,但它也必须向后兼容旧的 x86 处理器。因此,英特尔并没有更换寄存器,而是将现有的寄存器扩展到 EAX , EBX , ECX , ...等等。 ( E 意思是“扩展”)。 AX寄存器只是 EAX 的低 16 位注册,仍然可以访问。

英特尔的第一个 64 位处理器遵循了相同的逻辑。 32 位 EAX被扩展到 64 位 RAX等等。当前的 x86-64 汇编语言仍然可以使用类似 addl 的指令对 32 位寄存器执行算术运算。 , subl , andl , orl , ... 等,与 l代表“长”,即 4 字节/32 位。 64 位算术由 addq 完成, subq , andq , orq , ...等,与 q代表“四字”,即 8 字节/64 位。

编辑 :This pdf看起来它很好地介绍了 32 位和 64 位 x86 体系结构之间的差异。

关于assembly - 为什么 32 位应用程序可以在 64 位 x86 CPU 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28307180/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com