编译器:转换为汇编

时间:2010-04-10 08:13:38

标签: compiler-construction assembly

我为我的实验语言编写了一个解释器,并知道我想继续为它编写一个小编译器。它可能需要源代码,执行与解释器(tokenizer,parser)相同的步骤,然后将源代码转换为汇编。

现在我的问题:

  • 我能说我的语言中的每个命令都可以1:1翻译成一堆汇编指令吗?我的意思是,如果我必须完全抛弃整个输入程序,或者它只是转换为每行汇编。

  • 我应该使用哪种汇编程序作为输出格式?

3 个答案:

答案 0 :(得分:4)

  1. 我将您的问题解释为询问您的语言中的每个语句是否会在任何上下文中转换为相同的ASM行。答案是:这取决于你的语言,但通常没有。存在诸如寄存器分配之类的复杂问题,这可能导致输出不是1:1,这取决于上下文。您的语句可能需要一些寄存器,这些寄存器在一个上下文中可能是空闲的而在另一个上下文中占用(因此您将使用该堆栈)。
  2. 取决于平台以及您的计划。如果要编译为Windows的本机程序集,x86汇编语言应该是您的目标。

答案 1 :(得分:0)

除非你绝对决心“重新发明轮子”,否则你也可以只发出C代码,然后将其传递给现有的C编译器,例如: GCC。它比编写自己的后端要容易得多,你将免费获得所有C编译器的优化等。

答案 2 :(得分:0)

不,你不能指望那样。如果你的语言包含像eval()这样的东西,它可以变得很时髦。

作为后端汇编程序,nasm似乎最受欢迎。 GAS是可能的,但我发现它有点无情且不完整。