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

时间:2013-08-01 04:32:16

标签: c++ c compiler-construction linker loader

I've read

  

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

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

任何理解汇编程序,链接器和加载器作业的参考都会有所帮助。

2 个答案:

答案 0 :(得分:6)

  

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

大多数编译器只知道如何为特定CPU(或少数CPU)发出代码。每个目标CPU都要求有人为它编写编译器后端,并且该任务非常重要。

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

  

任何参考以理解汇编程序,链接器和加载器的工作

谷歌搜索上述条款导致我here

答案 1 :(得分:5)

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

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

这个想法也适用于汇编程序和链接器(可能稍微不那么多)。