哪个汇编程序要定位?

时间:2010-03-04 21:21:52

标签: compiler-construction assembly code-generation

我正在构建一个玩具编译器作为学习项目,我现在正在代码生成阶段徘徊。我发现this page描述了我可以定位的许多不同的汇编程序,我想要一些可供选择的建议。

我的目标是优化我的学习经验 - 为此,我尝试做出能够为我提供最有用的知识的决策。一些例子是:

  • 使用大量中间步骤而不是直接从AST到ASM
  • 定位x64 / Linux而不是JVM或LLVM

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

如果其中任何一个听起来特别不知情,我还在学习,所以如果我“做错了”,请随时告诉我。

2 个答案:

答案 0 :(得分:2)

您是否会考虑非x86目标,如MIPS这样更清晰的RISC(精简指令集计算机)处理器,您可以使用软件MIPS emulator进行测试?

否则我会说Linux,我会考虑NASM风格的汇编输出或中间格式。我相信YASM,FASM支持默认或标记的兼容性,并使用英特尔的语法,而GNU的气体使用AT& T的语法,这被广泛认为是尴尬或更糟,但与gcc输出兼容。

答案 1 :(得分:0)

如果您生成ASM,则没有理由使用任何高级功能,因此我认为除了其他功能之外还有很多东西要卖掉。您可以快速扫描几个,然后选择最容易起床和运行的那些。

另外,请记住,如果您除了基本功能之外什么都没有,并且需要小心地设计ASM输出代码,那么您应该能够切换到不同的汇编程序格式,而只需要切换输出格式字符串(IIRC) printf可以按位置选择参数,因此您甚至可以反转参数顺序)。我不会写它来预先做到这一点,但如果你记住你可能想要稍后,它可能会在以后支付。