2

编译器如何将二进制代码生成到单独的文件中?参考 GCC 的源代码中的哪些文件处理这将有很大帮助。我想知道的是编译器(尤其是 gcc)究竟是如何从 ASM 生成机器代码的?

4

2 回答 2

9

要回答这个问题,需要书籍,而不仅仅是几行字。

短的版本是:

编译器分为两部分:

  1. 将特定语言(如 C)翻译成语法树(表示程序的通用方式)的前端

  2. 以及将语法树转换为机器特定(X86、ARM、...)代码的后端。

涉及几个步骤:

  1. 词法分析(将“switch”等关键字转换为代码)
  2. 语法分析(从上一步转换为语法树)
  3. 代码优化(修改语法树以提高性能)
  4. 代码生成(从语法树生成机器代码)
  5. 链接(将更多执行单元组合到一个二进制文件中)

谷歌搜索可以为您提供更详细的信息。

于 2012-10-04T16:43:39.347 回答
6

汇编器是一个单独的实用程序。您可以在此处找到更多信息:http ://en.wikipedia.org/wiki/GNU_Assembler

源代码是 binutils 包的一部分。你可以在这里找到它:ftp: //ftp.gnu.org/gnu/binutils/

于 2012-10-04T15:43:01.287 回答