为什么现成的应用程序适用于Intel和AMD处理器?

rom*_*das 10 cpu assembly compatibility

我缺乏理解的一件事是如何为Intel CPU编译的代码可以在AMD CPU上运行.

我的基本理解是,如果编译C代码,例如,编译器将源代码转换为机器语言,该语言将具有特定处理器的指令.因此,您需要使用编译器为您希望应用程序使用的任何平台进行编译.为什么不需要针对AMD和Intel的编译器,并且必须为特定处理器购买软件?

我知道AMD处理器和英特尔处理器在较旧的x86指令中具有一些兼容性.我想知道的是他们是如何做到的?我的意思是,它不像AMD或英特尔相互呼唤并告诉对方他们的商业机密,那么他们如何创建兼容的指令集呢?

所有的兼容性仍然基于386指令集,有一堆语句,如"如果是AMD CPU,这个ELSE IF INTEL那样做"吗?

Zif*_*fre 19

AMD和Intel x86和x86-64 CPU几乎完全兼容.它们都实现了x86和x86-64的全部功能.它们每个都有自己的扩展(如MMX和3DNow),但编译器通常不会使用它们,除非你告诉它们.如今,AMD和英特尔都支持几乎所有彼此的扩展.你可能不得不担心差异的唯一一次是当你做真正的低级内核时.

顺便说一下,指令集并不是真正的"商业秘密".实施是.两家公司都在指令集上生成文档,因此每个公司都可以复制它.其原因可能是,如果更多的公司生产兼容芯片,将为该指令集编写更多软件,因此会有更多人购买这些芯片.x86/x86-64基本上是台式机的标准架构,保证人们将继续购买英特尔和AMD芯片.英特尔和AMD有非常不同的实现,它们只执行相同的代码.


flo*_*rin 6

实际上他们确实有交叉许可协议.信息和创新在90年代从英特尔流向AMD,当时AMD是386和486处理器的第二个来源,然后在英特尔采用x86-64扩展时从AMD到英特尔.


bdo*_*lan 6

还要记住,这些处理器的指令集是公开记录的; 通常,一个供应商会发明一组新的指令,而另一个供应商将会实现兼容的扩展.因此,而不是IF 386 ....你有更多的东西,如IF SSE4 IS SUPPORTED ......,而不考虑具体的供应商.