英特尔和AMD处理器是否具有相同的汇编程序?

use*_*281 20 c x86 compatibility amd intel

C语言用于编写UNIX以实现可移植性 - 使用不同编译器编译的相同C语言程序生成不同的机器指令.为什么Windows操作系统能够在Intel和AMD处理器上运行?

Ste*_*sop 24

AMD和Intel处理器(*)有一组共同的指令,因此编译器或汇编器可以编写在两者上运行"相同"的二进制代码.

然而,甚至来自一个制造商的不同处理器系列具有它们自己的指令集,通常被称为"扩展"或其他.忽略x87协处理器,我第一次记得这是一个营销点,当时一切都突然"采用MMX(TM)技术".期望在任何处理器上运行的二进制代码要么需要避免扩展,要么在使用它们之前检测CPU类型.

英特尔的Itanium 64位架构与AMD的x86-64架构完全不同,因此有一段时间他们的64位产品不兼容(Itanium与x86完全不同,而x86-64通过添加64位指令扩展了指令集).英特尔首先眨眼并采用了x86-64,尽管仍然存在一些差异:http://en.wikipedia.org/wiki/X86-64#Differences_between_AMD64_and_Intel_64

Windows可能会对几乎所有代码使用通用的x86或x86-64指令集.如果各种驱动程序和编解码器在多个版本中提供,并且在查询CPU后选择了正确的驱动程序和编解码器,我不会感到惊讶.

(*)实际上,英特尔制造或制造了各种处理器,包括ARM(英特尔的ARM处理器被称为XScale,但我认为他们已经销售了这项业务).AMD也制造其他处理器.但我们知道你指的是哪种Intel/AMD处理器:-)

  • +1.在内部,AMD和英特尔通常以完全不同的方式处理这些通用指令:某些指令在一个架构上的执行速度可能比在另一个架构上慢得多 (5认同)

Bre*_*dan 6

Intel 的 80x86 CPU 和 AMD 的 80x86 CPU“大致相同”,但有些东西完全不同(例如虚拟机扩展 - SVM 与 VT-x),有些东西(扩展)可能受支持,也可能不支持。但是,同一制造商的不同 CPU 上的某些东西也有所不同(例如,某些 Intel 芯片支持 AVX2,而有些则不支持)。

有多种方法可以处理差异:

  • 仅使用公共子集,以便在所有 80x86 CPU 上运行相同的代码(例如将其视为 8086 芯片)。

  • 使用一系列 CPU 共有的功能子集,以便在该范围内的所有 80x86 CPU 上运行相同的代码。这很常见(例如“该软件需要支持 64 位扩展的 80x86 CPU(和操作系统)”)。

  • 使用安装时测试。例如,可能有 4 个不同的软件副本(为 4 个不同范围的 CPU 编译),其中安装程序决定哪个副本对安装软件的计算机有意义。

  • 使用运行时测试。例如,代码可以使用CPUID指令来做if( AVX2_is_supported() ) { set_function_pointers_so_AVX2_is_used(); } else {set_function_pointers_so_AVX2_is_not_used(); }注意:某些编译器(英特尔的 ICC)可以自动生成执行运行时测试的代码。

这些不是相互排斥的选项。例如,安装程序可能决定安装 64 位版本(而不是 32 位版本),然后 64 位版本可能会检查哪些功能在运行时受支持,并具有不同的代码来使用不同的功能。

另请注意,可以分别处理操作系统的不同部分。例如,一个操作系统可以有 6 个不同的引导加载程序、4 个不同的“HAL”、4 个不同的内核和 3 个不同的“内核模块”来支持虚拟化;其中一些事情可能会进行运行时测试,而另一些可能不会。

Intel 和 AMD 处理器有相同的汇编程序吗?

几乎所有的 80x86 汇编器都支持几乎所有的扩展(来自所有 CPU 制造商——例如 Intel、AMD、VIA、Cyrix、SiS 等)。一般来说; 由程序员(或编译器)来确保他们只使用他们知道存在的东西。一些汇编器提供了使这更容易的功能(例如,NASM 提供了一个CPU ...指令,这样程序员可以告诉汇编器在看到指定 CPU 不支持的指令时生成错误)。


Mag*_*off 5

如您所料,主流Intel和AMD处理器具有相同的指令集.

例如,Windows不能在ARM或PowerPC芯片上运行,因为它在某种程度上依赖于底层指令集.

但是,大多数Windows都是用C++编写的(据我所知),它应该可以移植到其他架构中.Windows NT甚至可以在PowerPC和其他架构上运行.

  • XBox 360使用在PPC架构上运行的经过修改的Windows 2000内核.我很确定Windows可能和其他操作系统一样可移植,微软没有强烈的动机去向公众提供其他版本(例如,两个客户,等等). (3认同)
  • 查看Linux内核,了解在许多体系结构上运行的操作系统,即使使用不同的指令集也是如此.虽然C代码是可移植的,但是每个目标都需要更改许多汇编程序. (2认同)
  • 在九十年代中期,有一个版本的Windows在PowerPC,MIPS和Alpha处理器以及x86上运行.它们逐渐在NT3.1和Win2000之间消失.可能仍有一个在Itanium上运行的版本.NT的编写考虑了可移植性 - 有一本关于开发的名为Show Stopper的好书 - 但我怀疑你现在不能仅仅为PPC重建Win7. (2认同)

Rya*_*ill 5

AMD与英特尔兼容,否则他们永远不会在市场上获得立足点.

它们实际上是克隆兼容的.

瑞安


Dan*_*iel 5

AMD 和 Intel 使用相同的指令集。

当您在 AMD 处理器或 Intel 处理器上安装 Windows 时,它不会在机器上“编译”代码。

我记得很多人在大学期间对这个主题感到困惑。他们认为“设置”意味着它正在您的机器上编译代码。不是。大多数(如果不是全部)免费领域之外的 Windows 应用程序都是以二进制形式提供给您的。

至于便携性,这不一定是 100% 正确的。尽管 C 具有高度可移植性,但在许多情况下,为特定操作系统或系统编写代码将导致代码只能在该机器上编译/执行。例如,某些 Unix 机器以不同的方式处理文件和目录,因此它可能不是 100% 可移植的。