Sam*_*Sam 5 compiler-construction assembly
我的理解是编译器将高级语言转换为机器代码.我有一个问题,编译器(比如VC++)是否也使用汇编程序?我记得看到汇编代码,只要发生崩溃或类似的事情.
这取决于编译器; 许多编译器可以编译成汇编.例如,如果您将'-S'标志传递给gcc,例如:
gcc -S -o test.S test.c
Run Code Online (Sandbox Code Playgroud)
这会将test.c文件的程序集输出到文件test.S中,您可以查看它.(如果您要尝试阅读程序集,我建议使用-O0,因为那里的编译器优化可能会让您感到困惑).
由于您在问题中提到了Visual C++,Paul Dixon在下面指出Visual C++使用/ FA标志来完成同样的事情.
一般来说,编译器将一种语言翻译成另一种语言。大多数编译器以机器代码为目标;以下是执行此操作的最常见方法,按从最低级别到最高级别的顺序排列:
如果您想尝试编写编译器,我建议您从 C 之类的东西开始作为后端。如果您想稍后更详细地了解,请尝试 LLVM。如果您尝试直接生成汇编语言或机器代码,它的效率可能会低于 C 编译器或 LLVM 生成的效率。我是根据令人尴尬的个人经历来谈这件事的。