Digital Mars D编译器;获取ASM输出

时间:2010-08-28 21:42:25

标签: compiler-construction d dmd

我正在阅读Andrei Alexandrescu关于D编程语言的书。他是一位优秀的作家,在解释D语言方面做得非常出色。然而,当我无法想象ASM输出或某些关键字的后果(例如输入,输出等或其他结构)时,我发现某些结构难以理解。即使我的ASM非常糟糕而且我从不使用它,但是能够理解某些关键字如何对计算机和正在进行的工作有所帮助,这对我有很大的帮助。

DMD编译器有许多有趣的功能(代码覆盖,生成接口(头文件),生成文档,分析,...)但我还没有看到输出ASM代码的转换。编译器会生成.obj文件,并从阅读以下链接:http://www.digitalmars.com/ctg/obj2asm.html我怀疑我需要一个工具来手动转换目标文件。我更喜欢编译器开关,有吗?

在该页面的底部,我链接到一个页面,我可以为提及包含该工具的产品付费。来自GNU背景,我非常不满意。这仅适用于C / C ++,还是适用于D编译器?

有没有其他方法可以将这些.obj文件转换为可读的ASM代码,还是必须使用其他D编译器(如GDC或LDC)来获取ASM输出?我不愿意。 DMD由创始人自己创建,我敢肯定他正确地实现了大部分功能/大部分优化。

那么,我怎样才能看一看ASM代码?

谢谢。

3 个答案:

答案 0 :(得分:9)

obj2asm实用程序由DMD编译器套件提供,该套件可免费使用(在双GPL和Artistic许可下)。请参阅D编程语言网站上的DMD Compiler for Linux

答案 1 :(得分:7)

您可以尝试objconv。这就是我使用的。 DMD不通过交换机输出汇编器的原因是因为它永远不会将ASM生成为离散步骤。它直接从其内部表示生成二进制操作码。这是编译速度如此之快的部分原因。

或者您可以使用DMD随附的DMD obj2asm工具。

obj2asm somefile.o > somefile.s

答案 2 :(得分:-1)

Digital Mars编译器的后端是商业许可的,不是开源的,也许解释了为什么与后端输出相关的工具也是专有的。

出于教育目的,您可以尝试http://dgcc.sourceforge.net/这是GCC后端的D前端,因此是完全开源的。