编译器如何将二进制代码生成到单独的文件中?参考 GCC 的源代码中的哪些文件处理这将有很大帮助。我想知道的是编译器(尤其是 gcc)究竟是如何从 ASM 生成机器代码的?
问问题
531 次
2 回答
9
要回答这个问题,需要书籍,而不仅仅是几行字。
极短的版本是:
编译器分为两部分:
将特定语言(如 C)翻译成语法树(表示程序的通用方式)的前端
以及将语法树转换为机器特定(X86、ARM、...)代码的后端。
涉及几个步骤:
- 词法分析(将“switch”等关键字转换为代码)
- 语法分析(从上一步转换为语法树)
- 代码优化(修改语法树以提高性能)
- 代码生成(从语法树生成机器代码)
- 链接(将更多执行单元组合到一个二进制文件中)
谷歌搜索可以为您提供更详细的信息。
于 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 回答