有没有ASM编译器?

时间:2010-12-09 03:37:37

标签: compiler-construction

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

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

4 个答案:

答案 0 :(得分:3)

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

汇编语言的工具允许您定义宏或为您注册分配,但任何更高级的工具都将被视为编译器,其输入不再是汇编语言。

答案 1 :(得分:2)

虽然我同意travelboy's answer,因为任何这样的'汇编汇编'语言都不再是汇编,我不得不提到有'recompilers'和JIT,其源语言是机器语言(甚至不是组件)。

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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