代码生成

时间:2012-09-26 12:31:36

标签: compiler-construction code-generation

编译器如何生成单独文件的二进制代码? 对GCC源代码中的哪些文件的引用会对此有所帮助。 我想知道的是编译器(特别是gcc)究竟是如何从ASM生成机器代码的?

2 个答案:

答案 0 :(得分:9)

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

短版本是:

编译器分为两部分:

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

  2. 和一个后端,它将语法树转换为特定于机器的(X86,ARM,...)代码。

  3. 涉及以下几个步骤:

    1. 词法分析(将“切换”等关键字转换为代码)
    2. 语法分析(从上一步转换为语法树)
    3. 代码优化(修改语法树以提高性能)
    4. 代码生成(从语法树生成机器代码)
    5. 链接(将更多执行单元组合成一个二进制文件)
    6. Google搜索可以为您提供更详细的信息。

答案 1 :(得分:6)

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

源代码是binutils包的一部分。您可以在此处找到它:ftp://ftp.gnu.org/gnu/binutils/