2010-03-04 71 views
3

我正在构建一个玩具编译器作为一个学习项目,现在我正在围绕代码生成阶段徘徊。我发现this page描述了我可以定位的一系列不同的汇编程序,并且我希望提供一些可供选择的建议。哪个汇编程序要定位?

我的目标是优化我的学习体验 - 为此,我试图做出决定,让我获得最有用的知识。那的一些例子:

  • 使用了大量的中间步骤,而不是从AST直行到ASM
  • 针对X64/Linux的,而不是JVM或LLVM

我明白这是非常主观,所以试图进一步澄清:我更喜欢专有的开放源代码,广泛使用到不广泛使用,广泛到具体。为此,我会避免像HLA这样的东西,因为它比真正的ASM更“特定”。

如果这听起来特别不明白,我还在学习,所以请随时告诉我,如果我“做错了”。

回答

2

您会考虑使用软件MIPS emulator来测试非x86目标,例如MIPS等更干净的RISC(精简指令集计算机)处理器吗?

否则我会说,对于Linux来说,我会考虑NASM风格的装配输出或中间格式。我相信YASM,FASM支持默认或标志兼容性,并且使用英特尔的语法,而GNU的气体使用T的语法,这种语法被广泛认为是尴尬或更坏,但与gcc输出兼容。

0

如果您生成ASM,没有理由使用任何高级功能,所以我认为没有多少东西可以销售其余的。你可以快速扫描几个,然后选择你最容易起床和最容易运行的任何一个。另外,请记住,如果您只是避免使用基本功能,并且小心翼翼地构建ASM输出代码,那么您应该能够切换到不同的汇编程序格式,只需要切换输出格式字符串IIRC printf可以按位置选择参数,因此您甚至可以反转参数顺序)。我不会写它来做这件事,但如果你记住你可能想要以后,它可能会在稍后支付。