Assembly 编译器:如何生成和组装汇编代码

Assembly 编译器:如何生成和组装汇编代码,assembly,compiler-construction,operating-system,Assembly,Compiler Construction,Operating System,如果我已经编写了一个编译器,将我的代码翻译成三地址代码,那么我如何决定是否将这三地址代码转换为MIPS或ARM汇编代码。完成后,如何调用汇编器从该代码创建程序 可能的解决方案:指出GNU有一个将汇编汇编代码的命令as。我假设我需要选择我想要的任何汇编程序,然后找出如何使用我正在编写编译器的编程语言调用汇编程序。听起来似乎不一定要选择汇编器,但它通常特定于编译代码的机器。这让我更清楚了一点 我在这方面没有任何经验,但我想你需要将你的3地址代码匹配到一些汇编例程中 您可以在VisualStudio上

如果我已经编写了一个编译器,将我的代码翻译成三地址代码,那么我如何决定是否将这三地址代码转换为MIPS或ARM汇编代码。完成后,如何调用汇编器从该代码创建程序


可能的解决方案:指出GNU有一个将汇编汇编代码的命令
as
。我假设我需要选择我想要的任何汇编程序,然后找出如何使用我正在编写编译器的编程语言调用汇编程序。听起来似乎不一定要选择汇编器,但它通常特定于编译代码的机器。这让我更清楚了一点

我在这方面没有任何经验,但我想你需要将你的3地址代码匹配到一些汇编例程中


您可以在VisualStudio上编写c代码并将其调试到汇编模式,您可以看到指令如何映射到汇编指令(或一组指令)

无论您是生成MIPS代码、ARM代码,还是同时生成这两种代码,或者生成其他体系结构的代码,都只是希望代码在什么计算机上运行的问题。没有人能帮你做那个决定。您的意思是问如何生成此代码(正如标题所暗示的那样)?这仍然是相当广泛的,可能是重复的,但至少作为一个问题,它是有意义的。
gcc
系列编译器和汇编程序可以在其源代码中进行研究,也可以作为命令行程序来了解这个主题。汇编程序通常是一个获取源代码(在汇编中)的命令行程序并吐出对象文件和/或可执行文件。在使用基于GCC的工具链的系统上,它通常被称为
as
。Seva:是的,但一般的三地址代码就像虚拟CPU的汇编程序。您仍然需要从虚拟CPU到真实CPU的转换,这更像是一个编译器任务(寄存器分配和所有),而不是汇编程序。