7

アンドレイ・アレキサンドレスクのDプログラミング言語に関する本を読んでいます。彼は優れた作家であり、D言語の側面を説明するのにかなり良い仕事をしています。ただし、ASMの出力や特定のキーワード(in、outなど、または他の構成)の結果を想像できない場合、特定の構成を理解するのは難しいと思います。私のASMはかなり悪く、使用したことはありませんが、特定のキーワードがコンピューターでどのように機能し、実行されている作業を理解できるようになると非常に役立ちます。

DMDコンパイラには多くの興味深い機能(コードカバレッジ、インターフェイス(ヘッダーファイル)の生成、ドキュメントの生成、プロファイリングなど)がありますが、ASMコードを出力するための切り替えは見ていません。コンパイラは.objファイルを生成し、次のリンクを読んでいます。http ://www.digitalmars.com/ctg/obj2asm.htmlオブジェクトファイルを手動で変換するツールが必要だと思います。コンパイラスイッチがいいのですが、ありますか?

そのページの下部に、そのツールを含むと言及している製品の代金を支払うことができるページにリンクされています。GNUのバックグラウンドから来て、私はそれについて非常に眉をひそめました。これはC/C ++のみに適用されますか、それともDコンパイラにも適用されますか?

これらの.objファイルを読み取り可能なASMコードに変換する他の方法はありますか、またはASM出力を取得するために他のDコンパイラ(GDCやLDCなど)に頼る必要がありますか?私はしたくない。DMDは創設者自身によって作成されたものであり、彼はほとんどの機能を正しく/大部分が最適化して実装したと確信しています。

では、どうすればASMコードを覗くことができますか?

ありがとうございました。

4

3 に答える 3

10

このobj2asmユーティリティは、DMDコンパイラスイートによって提供されます。DMDコンパイラスイートは、無料で利用できます(GPLとArtisticのデュアルライセンスの下で)。Dプログラミング言語のWebサイトでLinux用のDMDコンパイラを参照してください。

于 2010-08-28T21:56:19.943 に答える
7

objconvを試すことができます。それが私が使っているものです。DMDがスイッチを介してアセンブラを出力しない理由は、ASMを個別のステップとして生成しないためです。内部表現から直接バイナリオペコードを生成します。これは、コンパイルが非常に高速である理由の一部です。

または、DMDに同梱されているDMDobj2asmツールを使用することもできます。

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

Digital Marsコンパイラのバックエンドは、オープンソースではなく商用ライセンスであり、おそらくバックエンド出力に関連するツールもプロプライエタリである理由を説明しています。

教育目的では、GCCバックエンドのDフロントエンドであるhttp://dgcc.sourceforge.net/を試してみてください。したがって、完全にオープンソースです。

于 2010-08-28T21:51:36.797 に答える