代码生成

use*_*963 2 compiler-construction code-generation

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

Sdr*_*dra 9

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

短的版本是:

编译器分为两部分:

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

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

涉及以下几个步骤:

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

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

  • 这些确实是编译器将一种语言(C++)转换为另一种语言(特定机器的汇编代码)所做的步骤的概述.如果你想了解更多关于它的信息,我建议你阅读_ [The Dragon Book](http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools#Second_edition) - 一本关于编译器的非常着名的书设计_ (2认同)

Vau*_*ato 6

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

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