7

我正在阅读 Andrei Alexandrescu 关于 D 编程语言的书。他是一位出色的作家,在解释 D 语言的各个方面方面做得非常好。然而,当我无法想象 ASM 输出或某些关键字的后果(例如 in、out 等或其他结构)时,我发现某些结构难以理解。尽管我的 ASM 非常糟糕而且我从不使用它,但它对我能够理解某些关键字对计算机的影响以及正在完成的工作有很大帮助。

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

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

有没有其他方法可以将这些 .obj 文件转换为可读的 ASM 代码,或者我必须求助于其他 D 编译器(例如 GDC 或 LDC)来获取 ASM 输出?我不喜欢。DMD 是由创始人自己创建的,我相信他正确地实现了大多数功能/很大程度上优化了。

那么,如何查看 ASM 代码呢?

谢谢你。

4

3 回答 3

10

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

于 2010-08-28T21:56:19.943 回答
7

你可以试试objconv。这是我用的。DMD 不通过开关输出汇编程序的原因是因为它从不将 ASM 作为离散步骤生成。它直接从其内部表示生成二进制操作码。这也是它编译速度如此之快的部分原因。

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

obj2asm somefile.o > somefile.s
于 2010-08-28T22:48:28.207 回答
-1

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

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

于 2010-08-28T21:51:36.797 回答