【问题标题】:Are there any ASM compilers?有没有 ASM 编译器?
【发布时间】:2010-12-09 03:37:36
【问题描述】:

我知道 ASM 通常通过汇编程序运行,并产生或多或少的一对一映射到最终二进制文件,但这不是我想的。

有没有人制作一种工具,将 ASM(或目标文件)视为一种编译语言,可以对其执行全部优化? 虽然这样的工具可能不是特别有用它是自我的,它可以做一些事情,比如从闭源静态库中内联函数。

【问题讨论】:

    标签: assembly optimization compiler-construction


    【解决方案1】:

    将 ASM 和机器代码视为表达相同信息(指令)的两种不同形式。编译器的输出是机器码。 ASM 已经是这样了(仅以人类可读的形式编写),因此编译器没有太多工作要做。

    有一些汇编语言工具可以让您定义宏或为您进行寄存器分配,但任何更高级的东西都将被视为编译器,其输入不再是汇编语言。

    【讨论】:

    • 我现在并且完全清楚这一切。也就是说,没有理由不能将 ASM 视为“更高”级别的语言,或者更可能是中间代码。提取基本的块结构,您甚至可以执行循环展开和死代码消除之类的操作(除非您在内联函数之后这样做,否则您将拥有比原始编译器更多的上下文)。
    • 哦,我有点草率地忽略了 ASM 和机器码之间的区别。
    • 现在我明白你的意思了……我猜汇编代码通常被视为最终产品,因此循环展开等优化会发生在更早的步骤中(现在很少有人直接在汇编中编程……) .这并不意味着不可能。我不知道这些工具,但哈维尔显然知道更多。
    【解决方案2】:

    虽然我同意travelboy's answer 的观点,即任何此类“已编译的汇编”语言都不再是汇编语言,但我不得不提一下,存在“重新编译器”和源语言为机器语言(甚至不是汇编)的 JIT .

    这些程序采用一堆可执行代码,通常已经加载并准备好执行,并对其进行转换,识别各种结构并替换为不同的版本,这些版本可以更好、更快、更安全或只是不同。

    qemu 就是一个例子。它的原始形式是一个 CPU 模拟器,它通过将给定的 CPU 二进制文件重新编译到不同的 CPU 中来执行 (Binary Translation)。但它也可以在两个 CPU 相同时工作,在这种情况下,转换允许特权代码通过“突破”到硬件模拟器在 VM 环境中执行。

    一个非常有趣的例子是 HP Dynamo (old Ars Technica article),这是一款通过重新编译 HP PA-8000 二进制文件实现了意想不到的加速的研究软件。

    【讨论】:

    • 整洁的东西。这些中的任何一个在离线模式下工作吗?那是二进制文件到二进制文件的翻译,而不是记忆图像到记忆图像的翻译?
    • 这确实很有趣。是否还有类似于硬件无关的交换格式?
    • @travelboy:我不知道(但很多人建议“x86 是新的字节码”)。 @BCS:JVM 和 CLR 都是基于堆栈的机器,所以它们不像“真正的”机器语言。更现代的字节码是基于寄存器的(Lua、新 JavaScript、Dalvik、一些 Python,我认为是 Parrot),使它们更接近于汇编语言(并且具有显着的性能优势)
    • 合成 ASM 需要类似于真实机器并没有什么特别的原因。如果你 JIT 它,那么差异就会消失,如果你不这样做,无论它看起来如何,你都会受到打击。
    • 基于堆栈的机器与机器语言有完全不同的“感觉”。对这些进行编程更接近 Forth 或 PostScript,而不是汇编程序。
    【解决方案3】:

    我相信汇编语言的艺术是您正在寻找的: http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/index.html

    【讨论】:

      【解决方案4】:

      当 DEC 从 VAX 架构过渡到 AlphaAXP 时,他们的 MACRO32 汇编器变成了一种针对 Alpha 的高级语言编译器。 AFAIR,已经进行了一些优化。

      http://en.wikipedia.org/wiki/VAX_Macro

      【讨论】:

        猜你喜欢
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 2010-09-16
        • 2012-07-19
        • 1970-01-01
        • 2021-02-16
        相关资源
        最近更新 更多