2010-08-28 9 views
7

Sto leggendo il libro di Andrei Alexandrescu sul linguaggio di programmazione D. È uno scrittore eccellente e fa un ottimo lavoro nello spiegare aspetti del linguaggio D. Trovo tuttavia alcuni costrutti difficili da capire quando non riesco ad immaginare l'output ASM o le conseguenze di determinate parole chiave (come in, out, ecc. O altri costrutti). Anche se il mio ASM è piuttosto brutto e non lo uso mai, mi aiuta molto a capire come funzionano determinate parole chiave per il computer e il lavoro svolto.Digital Mars D compilatore; acquisizione dell'uscita ASM

Il compilatore DMD ha molte funzioni interessanti (copertura del codice, generazione di interfacce (file di intestazione), generazione di documentazione, profilazione, ...) ma non ho visto un interruttore per emettere il codice ASM. Il compilatore genera file .obj e dalla lettura del seguente link: http://www.digitalmars.com/ctg/obj2asm.html Sospetto di aver bisogno di uno strumento per convertire manualmente i file oggetto. Preferirei un interruttore del compilatore, ce n'è uno?

Nella parte inferiore di questa pagina, sono collegato a una pagina in cui posso pagare i prodotti citati contenenti tale strumento. Provenendo da uno sfondo GNU, mi sono molto accigliato. È solo per C/C++, o si applica anche al compilatore D?

C'è un altro modo per convertire questi file .obj in codice ASM leggibile oppure devo ricorrere ad altri compilatori D (come GDC o LDC) per acquisire l'output ASM? Preferisco non farlo. DMD è stato creato dallo stesso fondatore, sono sicuro che ha implementato la maggior parte delle funzionalità correttamente/ampiamente ottimizzato.

Quindi, come posso dare un'occhiata al codice ASM?

Grazie.

+3

Inoltre, DMD è l'unico compilatore con pieno supporto per D 2.0 – You

risposta

7

Si potrebbe provare objconv. È quello che uso. Il motivo per cui DMD non emette l'assemblatore tramite un interruttore è perché non genera mai ASM come un passo discreto. Genera opcode binari direttamente dalla sua rappresentazione interna. Questo è parte del motivo per cui si compila così velocemente.

Oppure è possibile utilizzare lo strumento DMD obj2asm fornito in dotazione con DMD.

obj2asm somefile.o > somefile.s 
+1

Grazie, mi dà davvero l'output ASM. –

+1

C'è un modo per ridurre l'output ASM al solo codice che ho scritto io stesso? Al momento il file oggetto sembra essere stato collegato staticamente alla libreria di D, è possibile o devo solo conviverci? –

+0

@daevius: Probabilmente non c'è molto che tu possa fare qui.Queste dovrebbero essere istanze di template, poiché il resto di Phobos non dovrebbe finire nello stesso file oggetto perché è compilato separatamente. – dsimcha

-1

Il backend del compilatore Digital Mars è concesso in licenza commerciale, non open source, forse per spiegare perché anche gli strumenti relativi all'output backend sono proprietari.

Per scopi didattici si potrebbe provare http://dgcc.sourceforge.net/ che è un front-end D sul backend GCC, quindi interamente open source.

+1

All Digital Mars compilatori sono (per quanto ne so) disponibile gratuitamente; e il riferimento D compilatore (DMD) è sotto una licenza GPL. Anche la maggior parte dei loro strumenti sono. – You

+1

Solo il front-end è GPL. Il back-end è concesso in licenza commerciale. –

+0

@Peter Alexander è tuttavia disponibile [il codice sorgente] (https://github.com/D-Programming-Language/dmd/tree/master/src/backend). –

9

L'utilità obj2asm è fornita dalla suite di compilatori DMD, che è disponibile gratuitamente (con licenza GPL e artistica doppia). Vedere DMD Compiler for Linux sul sito Web D Programming Language.

+1

Grazie, quindi un sistema operativo Linux sarebbe necessario per ottenere fonti ASM (o qualche altro strumento)? Non sono sicuro del motivo per cui questo è solo Linux ... –