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

时间:2009-07-10 13:37:22

标签: c x86 compatibility intel amd

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

6 个答案:

答案 0 :(得分:24)

AMD和英特尔处理器(*)有一大堆共同的指令,因此编译器或汇编器可以编写二进制代码,这两个代码在两者上运行“相同”。

然而,即使是来自一个制造商的不同处理器系列也有自己的指令集,通常称为“扩展”或其他。忽略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 :(得分:5)

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

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

但是,大多数Windows都是用C ++编写的(据我所知),它应该可以移植到其他架构中。 Windows NT even ran on PowerPC and other architectures

答案 2 :(得分:5)

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

它们与克隆有效兼容。

赖安

答案 3 :(得分:2)

AMD和英特尔使用相同的指令集。

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

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

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

答案 4 :(得分:2)

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

有多种方法可以解决这些差异:

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

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

  • 使用安装时测试。例如,可能有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不支持的指令时,可以告诉汇编程序生成错误)。

答案 5 :(得分:1)

英特尔和AMD处理器是否具有相同的汇编程序? 汇编程序汇编程序在处理器上运行,因此您的问题存在缺陷。处理器不要使用汇编程序。

如果您的意思是Intel和AMD处理器可以运行相同的汇编程序吗?那么答案是肯定的!

所有汇编程序都是一个程序,它从结构化文本文件中汇编其他程序。 Visual Basic是汇编程序的一个示例。