我对编译很感兴趣,我有一个关于 gcc 的问题。
我知道从代码生成一棵树来编译,那么ASM代码就是 生成,我需要关于这一点的一些解释。
ASM 代码是添加到文件中稍后执行,还是 ASM 代码直接加载到内存中使用 asm 函数?我正在开发一个小型编译器,但我不知道如何执行生成的树,而且我没有找到任何相关文档。
最佳答案
GCC 的前端解析不同语言(C、C++、Fortran、ObjectiveC、Java 等)的源文件。然后代码 (AST) 被翻译成内部表示,RTL (register transfer language) .这是接近 assembly 的表示。
然后将此 RTL 代码转换为目标机器的程序集并写入 .o(目标)文件。
然后链接器将生成的 .o 文件组合成可执行文件。
GCC 在 C/C++ 中也支持“内联”汇编代码片段。
工作流程是
Source file ->
AST ->
RTL representation ->
machine codes (with _optional_ text output of the ASM code) ->
Executable (produced by linker)
对于解释器,您可以直接解释 AST 或为虚拟机生成您自己的操作码,因为这样的解释器(虚拟机)比 AST 解释器更简单。
如果您想了解所有详细信息,您应该查看 LCC (with a book by Chris Fraser and David Hanson) .随附的书中提供了实际架构代码生成的所有详细信息。
要了解生成的代码可以做什么,您应该阅读 Linkers and Loaders by John Levine书。
最后,为了避免询问有关脚本/解释器的所有信息,请参阅 Game Scripting Mastery by Alex Varanese .
关于c - 代码是如何执行的和gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11654994/