【发布时间】:2010-12-09 03:37:36
【问题描述】:
我知道 ASM 通常通过汇编程序运行,并产生或多或少的一对一映射到最终二进制文件,但这不是我想的。
有没有人制作一种工具,将 ASM(或目标文件)视为一种编译语言,可以对其执行全部优化? 虽然这样的工具可能不是特别有用它是自我的,它可以做一些事情,比如从闭源静态库中内联函数。
【问题讨论】:
标签: assembly optimization compiler-construction
我知道 ASM 通常通过汇编程序运行,并产生或多或少的一对一映射到最终二进制文件,但这不是我想的。
有没有人制作一种工具,将 ASM(或目标文件)视为一种编译语言,可以对其执行全部优化? 虽然这样的工具可能不是特别有用它是自我的,它可以做一些事情,比如从闭源静态库中内联函数。
【问题讨论】:
标签: assembly optimization compiler-construction
将 ASM 和机器代码视为表达相同信息(指令)的两种不同形式。编译器的输出是机器码。 ASM 已经是这样了(仅以人类可读的形式编写),因此编译器没有太多工作要做。
有一些汇编语言工具可以让您定义宏或为您进行寄存器分配,但任何更高级的东西都将被视为编译器,其输入不再是汇编语言。
【讨论】:
虽然我同意travelboy's answer 的观点,即任何此类“已编译的汇编”语言都不再是汇编语言,但我不得不提一下,存在“重新编译器”和源语言为机器语言(甚至不是汇编)的 JIT .
这些程序采用一堆可执行代码,通常已经加载并准备好执行,并对其进行转换,识别各种结构并替换为不同的版本,这些版本可以更好、更快、更安全或只是不同。
qemu 就是一个例子。它的原始形式是一个 CPU 模拟器,它通过将给定的 CPU 二进制文件重新编译到不同的 CPU 中来执行 (Binary Translation)。但它也可以在两个 CPU 相同时工作,在这种情况下,转换允许特权代码通过“突破”到硬件模拟器在 VM 环境中执行。
一个非常有趣的例子是 HP Dynamo (old Ars Technica article),这是一款通过重新编译 HP PA-8000 二进制文件实现了意想不到的加速的研究软件。
【讨论】:
我相信汇编语言的艺术是您正在寻找的: http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/index.html
【讨论】:
当 DEC 从 VAX 架构过渡到 AlphaAXP 时,他们的 MACRO32 汇编器变成了一种针对 Alpha 的高级语言编译器。 AFAIR,已经进行了一些优化。
【讨论】: