有人能解释一下 intel64 和 amd64 架构之间是否存在区别吗?
答案1
据我所知,扩展内存 64 位技术 (EM64T) 是英特尔对 AMD 的 AMD64 的实现,Intel64 和 AMD64 之间的区别是:
当源为 0 且操作数大小为 32 位时,EM64T 的 BSF 和 BSR 指令的行为有所不同。处理器设置零标志,并使目标的高 32 位保持未定义。
AMD64 支持 3DNow! 指令。这包括使用操作码 0x0F 0x0D 和 PREFETCHW 的预取,这对于隐藏内存延迟非常有用。
EM64T 缺乏保存和恢复简化(从而更快)版本的浮点状态(涉及 FXSAVE 和 FXRSTOR 指令)的能力。
EM64T 缺少一些特定于模型的寄存器,这些寄存器被视为 AMD64 架构的寄存器。这些寄存器包括 SYSCFG、TOP_MEM 和 TOP_MEM2。
EM64T 支持 32 位模式下的微码更新,而 AMD64 处理器使用不同的微码更新格式并控制 MSR。
EM64T 的 CPUID 指令非常特定于供应商,这对于 x86 风格的处理器来说很正常。
EM64T 支持 MONITOR 和 MWAIT 指令,操作系统使用它们可以更好地处理超线程。
AMD64 系统允许使用 AGP 孔径作为 IO-MMU。操作系统可以利用这一点,让普通 PCI 设备 DMA 到 4 GiB 以上的内存。EM64T 系统需要使用反弹缓冲区,速度较慢。
在 EM64T 上,SYSCALL 和 SYSRET 也仅在 IA-32e 模式下受支持(不支持兼容模式)。SYSENTER 和 SYSEXIT 在两种模式下均受支持。
带有 0×66(操作数大小)前缀的近分支行为有所不同。一种 CPU 仅清除前 32 位,而另一种 CPU 则清除前 48 位。
答案2
在维基百科的 x86 页面你可以阅读
1999 年至 2003 年,AMD 将 32 位架构扩展为 64 位,并在早期文档中将其称为 x86-64,后来称为 AMD64。英特尔很快采用了 AMD 的架构扩展,并将其命名为 IA-32e,后来更名为 EM64T,最后更名为 Intel 64。
换句话说,区别主要在于市场营销。Intel 和 AMD 有针对指令集的特定扩展,但只要您在用户空间编写程序,您通常就不需要知道其中的区别。