编译器 --> 汇编器 ----6ren">
gpt4 book ai didi

assembly - 编译器 "know"如何将代码翻译成处理器特定的程序集?

转载 作者:行者123 更新时间:2023-12-04 12:21:52 27 4
gpt4 key购买 nike

回答者已经知道的东西,但无论如何在这里展示我的思考过程:

从 HLL 到机器代码,这里有一组粗略的发生的事件(有链接器和其他东西,但现在让我们忽略它):

HLL --> 编译器 --> 汇编器 ----> 机器码

根据我购买的硬件,它可能有不同的处理器(Intel、SPARC、ARM 等)。汇编语言是特定于处理器的。因此,当代码来自编译器 --> 汇编器时,生成的汇编代码是特定于处理器的。

切入正题:

例如:我的硬件上有 Windows 操作系统。我得到,比如说,'Windows 7 64bit 的 C 编译器'。而且我在相同的硬件上也有 Ubuntu,我得到了“适用于 64 位 Ubuntu 的 C 编译器”。

  • 我可以在具有不同处理器架构的不同硬件上使用相同的操作系统,或者在同一硬件上使用不同的操作系统(如上例)。当我下载 C 编译器时,为什么编译器被列为特定于操作系统的?而不是特定于处理器?由于编译器的重点是将 HLL 转换为汇编,这是特定于处理器架构的和 不是 操作系统特定。
  • 假设 1. 是如何完成的,当我下载适用于 Windows 7 和 Ubuntu 的编译器时,编译器如何知道要生成什么处理器特定的汇编代码?编译器是否带有各种特定于处理器的汇编器?
  • 最佳答案

    有几个因素在起作用。对于台式机,实际上只有两种架构在使用:32 位是 x86(具有各种扩展),64 位是 x86-64。所以很多软件可以忽略这个问题,只指定“位数”。对于 Windows RT/8 之前的 Windows 尤其如此,它甚至不尝试支持任何其他体系结构。

    虽然编译器必须了解处理器架构,但实际上所有有趣的程序都必须以一种或另一种方式与操作系统交互。即使您的代码不与操作系统交互,编译器也必须知道二进制文件使用哪种文件格式、链接到哪些库等。运行时库也是特定于操作系统的,通常与编译器捆绑在一起。

    至于编译器如何知道要生成什么样的指令:您下载的二进制文件是专门为一种架构量身定制的(无论您从中获得的页面是否提到)并且无法为其他架构生成代码,或者确实如此有几个后端编译。

    也就是说,我没有看到很多编译器声明为“<language> compiler for <operating system>”。编译器编写者在指定指令集时通常更加迂腐,分发者也是如此。只有 Windows 人员对此非常草率,因为直到大约一年前,这还不是有用的信息。

    关于assembly - 编译器 "know"如何将代码翻译成处理器特定的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18935308/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com