May*_*hem 30
从我读到的扩展内存 64 位技术 (EM64T) 是 Intel 对 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 系统需要使用速度较慢的反弹缓冲器。
SYSCALL 和 SYSRET 也仅在 EM64T 上的 IA-32e 模式下(不在兼容模式下)受支持。两种模式都支持 SYSENTER 和 SYSEXIT。
带有 0×66(操作数大小)前缀的近分支行为不同。一种类型的 CPU 只清除最高 32 位,而另一种类型清除最高 48 位。
小智 10
在维基百科的 x86 页面上,您可以阅读
1999-2003 年,AMD 将这种 32 位架构扩展为 64 位,并在早期文档中将其称为 x86-64,后来称为 AMD64。英特尔很快就采用了 AMD 的架构扩展,名为 IA-32e,后来更名为 EM64T,最后更名为英特尔 64。
换句话说,差异化因素主要是营销。指令集有 Intel 和 AMD 特定的扩展,但只要您在用户空间编写程序,您通常不需要知道它们之间的区别。