代码之家  ›  专栏  ›  技术社区  ›  Taco de Wolff

数字mars d编译器;获取asm输出

  •  7
  • Taco de Wolff  · 技术社区  · 16 年前

    我正在阅读安德烈·亚历山大·埃斯库关于D语言编程的书。他是一个优秀的作家,在解释D语言方面做得很好。但是,当我无法想象某些关键字(如in、out等)或其他构造的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 回复  |  直到 13 年前
        1
  •  7
  •   Community Mohan Dere    13 年前

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

    或者你可以用DMD obj2asm 与DMD一起包装的工具。

    obj2asm somefile.o > somefile.s
    
        2
  •  9
  •   You    16 年前

    这个 obj2asm 实用程序由DMD编译器套件提供,免费提供(在双GPL和艺术许可下)。见 DMD Compiler for Linux 在D编程语言网站上。

        3
  •  -1
  •   Daniel Earwicker    16 年前

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

    为了教育目的,你可以尝试 http://dgcc.sourceforge.net/ 它是GCC后端的一个D前端,因此完全是开源的。