4

读过

编译器将以人类可读的编程语言编写的代码转换为您的处理器可以理解的机器代码表示。

编译器如何知道我的 CPU 的指令集?

任何了解汇编器、链接器和加载器工作的参考都会有所帮助。

4

2 回答 2

6

编译器如何知道我的 CPU 的指令集?

大多数编译器只知道如何为特定 CPU(或其中的一小部分)发出代码。每个目标 CPU 都需要有人为它编写一个编译器后端,而这项任务并非易事。

GCC 支持种类繁多的目标,但即使是 GCC 也只能为少数目标发出代码。换句话说,您可以构建 GCC 来为x86_64i*86处理器发出代码,并且您可以构建另一个副本来为 发出代码PowerPC,但您不能构建一个将为所有这三个处理器产生代码的 GCC。

任何了解汇编器、链接器和加载器工作的参考资料

谷歌搜索上述术语将我带到这里

于 2013-08-01T04:44:42.743 回答
5

本质上,硬件/软件的每种组合都需要自己的编译器。因此,即使您可能编写 C 代码以使其在 Windows 机器上编译和运行,与 Apple 机器的 C 编译器相比,您仍然需要一个不同实现的编译器。

顺便说一下,有些编译器会为与它们运行的​​硬件不同的硬件生成代码。一个简单的例子是 Arduino 产品。Arduino IDE 在 Windows(和其他)机器上运行,但代码是为 Arduino 板上的 Atmel 微处理器编译的。此外,每种板样式(UNO 等)都有不同风格的 Atmel 微处理器,这就是为什么在 IDE 中您必须识别草图的目标,以便编译器可以进行必要的调整以在特定的硬件(指令集)。

这个想法也适用于汇编器和链接器(可能少一些)。

于 2013-08-01T04:44:23.860 回答