数字Mars D编译器;获取ASM输出

问题描述 投票:0回答:3

我正在阅读 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代码呢?

谢谢你。

d dmd
3个回答
10
投票

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


7
投票

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

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

obj2asm somefile.o > somefile.s

-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.