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有非常不同的实现,它们只执行相同的代码.
还要记住,这些处理器的指令集是公开记录的; 通常,一个供应商会发明一组新的指令,而另一个供应商将会实现兼容的扩展.因此,而不是IF 386 ....你有更多的东西,如IF SSE4 IS SUPPORTED ......,而不考虑具体的供应商.