编译器和指令集

Compilers and Instruction sets

"C is a genereal purpose language, not tied to a particular system" The C programming Language, BRIAN W KERNIGHAN & DENNIS M. RITCHIE

然而,使用正确的编译器,我们可以制作一个在每台 Windows 机器上运行的 .exe,这反过来意味着在每台 CPU Windows 上运行。

所以我的问题是:是否每个 x86-64 CPU(Intel 或 AMD)都使用相同的指令集? (是的,我可以做一个比较......)如果没有,那么我将不得不假设编译器检测到 CPU 我们是 运行 并在编译期间使用正确的指令集。

我完全错了吗?

我几乎不知道我在说什么所以请耐心等待。 只是一个想看看引擎盖下的家伙。

谢谢

英特尔制造了许多共享“x86-64”系列核心指令集的不同处理器模型(以及不共享的其他处理器模型)。即使在具有共享核心指令的处理器中,也存在差异。较新的型号可能有旧型号没有的指令,指令集的某些部分可能在某些型号上而不在其他型号上。

有些指令甚至在不同的处理器上表现不同。

当您编译程序时,编译器“针对”指令子集的特定组合。这意味着这些子集中的指令可供编译器在生成代码时使用。编译器在编译特定程序时可能会或可能不会使用任何特定指令或子集,具体取决于其需要或选择。生成的程序适用于具有目标指令的处理器模型,而不适用于其他模型(除非编译器碰巧没有使用那些模型上没有的任何指令,即使它可能有)。

通常,编译器目标的默认设置要么是您正在使用的处理器模型 运行,要么是现代处理器模型常见的一些典型指令子集选择。也可以根据您为编译器提供的其他设置来选择目标,例如要求它以操作系统的特定版本为目标。但是,您可以传递编译器开关来告诉它针对完全不同的目标进行编译,甚至针对完全不同的体系结构进行编译,例如针对 ARM 处理器进行编译,而 运行 在 Intel 处理器上进行编译。

软件也是计算机系统的一部分,因此编译器生成的可执行文件也可能取决于 运行 时可用的某些软件库或可用的某些操作系统功能。