回答者已经知道的东西,但无论如何这里展示我的思考过程:
从 HLL 到机器代码,这里有一组粗略的事件发生(有链接器和其他东西,但现在让我们忽略它):
HLL --> 编译器 --> 汇编器 ----> 机器码
根据我购买的硬件,它可能有不同的处理器(英特尔、SPARC、ARM 等)。汇编语言是特定于处理器的。因此,当代码来自编译器 --> 汇编器时,生成的汇编代码是特定于处理器的。
言归正传:
例如:我的硬件上有 Windows 操作系统。我得到了“Windows 7 64 位的 C 编译器”。而且我在相同的硬件上也有 Ubuntu,并且我得到了“适用于 Ubuntu 64 位的 C 编译器”。
我可以在具有不同处理器架构的不同硬件上拥有相同的操作系统,或者在同一硬件上拥有不同的操作系统(如上面的示例)。当我下载 C 编译器时,为什么编译器被列为特定于操作系统的?而不是特定于处理器?由于编译器的重点是将 HLL 转换为汇编,这是特定于处理器架构而不是特定于操作系统的。
假设 1. 是如何完成的,当我下载适用于 Windows 7 和 Ubuntu 的编译器时,编译器如何知道要生成什么处理器特定的汇编代码?编译器是否带有各种特定于处理器的汇编器?