Perché convertire in linguaggio assembly invece di codice macchina?

2

Quando compilo un programma C, viene prima compilato per il codice assembly, poi assemblato in codice macchina. Sono curioso di sapere perché non si limita a convertire direttamente in codice macchina.

    
posta user126589 19.04.2014 - 05:26
fonte

2 risposte

2

Dipende dal compilatore e dalle opzioni fornite al compilatore. Al giorno d'oggi i compilatori più utilizzati scriveranno automaticamente il linguaggio macchina, ma genereranno un elenco di assembly se richiesto. Può essere utile avere l'elenco assembly perché a) a volte i compilatori hanno bug e vuoi controllare il codice generato, b) vuoi capire come il codice macchina è influenzato dalla pipeline della CPU e dalla cache e molte persone lo trovano molto più semplice da leggere per l'assemblaggio rispetto al codice macchina.

In questi giorni i compilatori convertono il tuo programma in una rappresentazione altamente astratta e ti permettono di scrivere back-end personalizzati per generare diversi sapori del linguaggio macchina o anche di altri linguaggi di alto livello.

    
risposta data 19.04.2014 - 05:58
fonte
0

È possibile che i compilatori generino codice adatto per l'uso come input per un processore (per l'esecuzione diretta), un linker, un assemblatore o qualche altro tipo di strumento di costruzione. Quale formato è utile dipende spesso da quale altro codice dovrà essere combinato con. Se un compilatore per il linguaggio X che genera un output adatto per una marca di linker e un compilatore per il linguaggio Y genera un output adatto a uno diverso, potrebbe essere difficile utilizzare una combinazione di codice X e Y nello stesso progetto. Se un compilatore per la lingua X, tuttavia, genera codice assembly invece di un file oggetto collegabile, potrebbe essere più semplice utilizzare l'output con la serie di strumenti associata alla lingua Y. Poiché i formati della lingua assembly non sono completamente standardizzati, alcuni massaggi potrebbero essere necessario, ma massaggiare un file in linguaggio assembly potrebbe essere più semplice della conversione di un file oggetto binario.

    
risposta data 18.12.2014 - 22:01
fonte

Leggi altre domande sui tag