【问题标题】:Which assembler to target?以哪个汇编程序为目标?
【发布时间】:2011-01-23 21:05:29
【问题描述】:

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

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

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

我知道这是非常主观的,因此尝试进一步澄清:我更喜欢开源而不是专有,广泛使用而不是不广泛使用,广泛到具体。为此,我会避免使用 HLA 之类的东西,因为它比真正的 ASM 更“具体”。

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

【问题讨论】:

    标签: compiler-construction assembly code-generation


    【解决方案1】:

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

    否则,对于 Linux,我会考虑将 NASM 样式用于您的程序集输出或中间格式。我相信 YASM、FASM 默认或通过标志支持兼容性,并使用 Intel 的语法,而 GNU 的 gas 使用 AT&T 的语法,这被广泛认为是尴尬或更糟糕的,但与 gcc 输出兼容。

    【讨论】:

      【解决方案2】:

      如果您生成 ASM,则没有理由使用任何高级功能,因此我认为与其他功能相比没有什么可卖的。您可以快速浏览几个,然后选择最容易启动和运行的那个。

      另外,请记住,如果您避免使用除基本功能之外的任何其他内容并稍微小心地构建 ASM 输出代码,您应该能够切换到不同的汇编器格式,而只需要切换输出格式字符串(IIRC printf 可以按位置选择参数,甚至可以颠倒参数顺序)。我不会写它来做这件事,但如果你记住你可能想稍后再做,它可能会在以后支付。

      【讨论】:

        猜你喜欢
        • 2019-12-16
        • 1970-01-01
        • 2011-01-01
        • 2023-03-16
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        相关资源
        最近更新 更多