Intel的80 x86 CPU和AMD的80 x86 CPU“大部分是相同的”,但有些东西是完全不同的(例如:虚拟机扩展- SVM与VT-x)和一些东西(扩展)可能支持也可能不支持。然而,在同一制造商的不同CPU上,有些东西也是不同的(例如,有些英特尔芯片支持AVX 2,有些不支持)。 有多种方法可以处理这些差异:
仅使用公共子集,以便相同的代码在所有80 x86 CPU上运行(例如将其视为8086芯片)。
使用一系列CPU共有的功能子集,以便在该范围内的所有80 x86 CPU上运行相同的代码。这是非常常见的(例如:“此软件需要支持64位扩展的80 x86 CPU(和操作系统)”)。
6条答案
按热度按时间8aqjt8rx1#
AMD和Intel处理器()有大量的共同指令集,因此编译器或汇编器可以编写在两者上运行“相同”的二进制代码。
然而,不同的处理器家族,甚至来自一个制造商,都有自己的指令集,通常被称为“扩展”或其他什么。忽略x87 coprocessor,我第一次记得这是一个营销点是当一切突然“与MMX技术”。预期在任何处理器上运行的二进制代码要么需要避免扩展,要么在使用它们之前检测CPU类型。
Intel的Itanium 64位架构与AMD的x86-64架构完全不同,因此有一段时间他们的64位产品是不兼容的(Itanium与x86完全不同,而x86-64通过添加64位指令来扩展指令集)。英特尔首先眨了眨眼,采用了x86-64,尽管仍有一些差异: AMD 64和Intel 64之间的差异 *
Windows可能对几乎所有代码使用通用的x86或x86-64指令集。我不会感到惊讶,如果各种驱动程序和编解码器是在多个版本,并选择正确的一次CPU已被审问。
(*)实际上,英特尔制造或已经制造了各种类型的处理器,包括ARM(英特尔的ARM处理器被称为XScale,但我认为他们已经出售了这项业务)。AMD也生产其他处理器。但我们知道您指的是哪种英特尔/AMD处理器:-)
8wigbo562#
AMD与Intel兼容。否则,他们永远不会在市场上站稳脚跟。
它们实际上是克隆兼容的。
njthzxwz3#
正如您所怀疑的,主流的Intel和AMD处理器具有相同的指令集。
例如,Windows不能在ARM或PowerPC芯片上运行,因为它在某种程度上依赖于底层指令集。
但是,Windows的大部分都是用C++编写的(据我所知),应该可以移植到其他架构上。Windows NT even ran on PowerPC and other architectures。
7d7tgy0s4#
Intel的80 x86 CPU和AMD的80 x86 CPU“大部分是相同的”,但有些东西是完全不同的(例如:虚拟机扩展- SVM与VT-x)和一些东西(扩展)可能支持也可能不支持。然而,在同一制造商的不同CPU上,有些东西也是不同的(例如,有些英特尔芯片支持AVX 2,有些不支持)。
有多种方法可以处理这些差异:
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位版本可能会在运行时检查支持哪些功能,并使用不同的代码来使用不同的功能。
还要注意,OS的不同部分可以单独处理。例如,OS可以具有6个不同的 Boot 加载器、4个不同的“HAL”、4个不同的内核和3个不同的“内核模块”以支持虚拟化;其中有些东西可以进行运行时测试,有些则不可以。
Intel和AMD处理器有相同的汇编器吗?
几乎所有的80 x86汇编器都支持几乎所有的扩展(来自所有CPU制造商-例如Intel、AMD、VIA、Cyrix、SiS、...)。一般而言;这取决于程序员(或编译器),以确保他们只使用他们知道存在的东西。一些汇编器提供了一些功能来使这更容易(例如NASM提供了一个
CPU ...
指令,这样程序员就可以告诉汇编程序在看到指定CPU不支持的指令时生成错误。ndasle7k5#
AMD和Intel使用相同的指令集。
当您在AMD处理器或Intel处理器上安装Windows时,它不会在机器上“编译”代码。
我记得很多人在大学期间对这个问题感到困惑。他们认为“setup”意味着它正在你的机器上编译代码。大多数,如果不是全部,Windows应用程序以外的自由领域,给你作为一个二进制文件。
至于可移植性,这不一定是100%正确的。虽然C是高度可移植的,但在许多情况下,为特定的操作系统或系统编写代码将导致代码只能在该机器上编译/执行。例如,某些Unix机器以不同的方式处理文件和目录,因此它可能不是100%可移植的。
w1jd8yoj6#
Intel和AMD处理器有相同的汇编器吗?汇编器汇编一个程序在处理器上运行,所以你的问题是有缺陷的。处理器不使用汇编器。
如果你的意思是英特尔和AMD处理器可以运行相同的汇编程序?那么答案是“是的”!!!
所有汇编程序都是从结构化文本文件汇编其他程序的程序。Visual Basic是一个汇编程序的例子。