Differenza tra compilatore e assemblatore

Autore: Laura McKinney
Data Della Creazione: 1 Aprile 2021
Data Di Aggiornamento: 5 Maggio 2024
Anonim
Compilatori ed interpreti
Video: Compilatori ed interpreti

Contenuto


Compilatore e assemblatore svolge un ruolo importante nell'esecuzione di un programma. Alcuni compilatori generano direttamente il codice eseguibile anziché il codice assembly. Il compilatore accetta il codice sorgente preelaborato e lo traduce nel codice assembly. L'assemblatore prende il codice assembly dal compilatore e lo traduce nel codice macchina trasferibile. In questo articolo, ho discusso le differenze tra compilatore e assemblatore con l'aiuto della tabella di confronto mostrata di seguito, basta dare un'occhiata.

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Conclusione

Tabella di comparazione

Base per il confrontoCompiler assembler
Di baseGenera il codice della lingua dell'assembly o direttamente il codice eseguibile.Genera il codice macchina trasferibile.
IngressoCodice sorgente preelaborato.Codice lingua assembly.
Fasi / PassaggiLe fasi di compilazione sono analizzatore lessicale, analizzatore di sintassi, analizzatore semantico, generazione di codice intermedio, ottimizzazione del codice, generazione del codice.L'assemblatore esegue due passaggi sull'input specificato.
ProduzioneIl codice assembly generato dal compilatore è una versione mnemonica del codice macchina.Il codice macchina trasferibile generato da un assemblatore è rappresentato da un codice binario.


Definizione di compilatore

Il compilatore è un programma per computer che legge il programma scritto in una lingua di origine, lo traduce in equivalente linguaggio assembly e inoltra il codice della lingua dell'assembly a assembler. Mentre la traduzione del codice sorgente in codice assembly, il compilatore riporta anche il errore nel codice sorgente al suo utente.

Anche i compilatori sono classificati come single-pass, multi-pass, load-and-go, debug e ottimizzazione. La classificazione viene effettuata in base alla funzione che svolge un compilatore e al modo in cui è stata costruita. Nonostante queste complessità, l'attività di base del compilatore rimane la stessa.

La compilazione viene eseguita in due parti, parte di analisi e parte di sintesi. Il parte di analisi suddivide il codice sorgente in parti costitutive e forma la rappresentazione intermedia del codice sorgente. Il parte di sintesi forma il codice target dalla rappresentazione intermedia.


La compilazione viene eseguita nelle seguenti fasi:

Analizzatore lessicale, analizzatore di sintassi, analizzatore semantico, generatore di codice intermedio, ottimizzatore di codice, generatore di codice, tabella dei simboli e gestore degli errori.

  • Il analizzatore lessicale legge i caratteri del codice sorgente e li raggruppa in flussi di token. Ogni token rappresenta la sequenza logica di caratteri simili parola chiave, identificatori, operatori. Viene chiamata la sequenza di caratteri che forma un token lessema.
  • Il analizzatore di sintassi analizza il token ottenuto dall'analizzatore lessicale e raggruppa i token in a struttura gerarchica.
  • Il analizzatore semantico controlla il codice sorgente per qualsiasi errore semantico.
  • Generatore di codice intermedio genera il rappresentazione intermedia del codice sorgente
  • Il ottimizzatore di codice ottimizza il codice intermedio in un codice macchina più veloce.
  • Il generatore di codici genera infine il codice target che è a codice macchina trasferibile o un codice assembly.
  • Il tabella dei simboli è una struttura di dati che contiene il record per ciascun identificatore nel codice sorgente.
  • Gestore errori rileva l'errore in ogni fase e gestisce tali errori.

Definizione di Assembler

Alcuni compilatori eseguono il compito dell'assemblatore e generano direttamente un codice macchina riposizionabile anziché il codice di assemblaggio, che viene ulteriormente passato direttamente al linker / caricatore. Il assembler prende come input il codice assembly generato dal compilatore e lo traduce in codice macchina trasferibile.

Vediamo come il codice macchina è diverso dal codice assembly. Codice di montaggio è il mnemonico versione del codice macchina. Significa che il codice assembly utilizza i nomi per rappresentare le operazioni e fornisce persino nomi agli indirizzi di memoria. D'altra parte, il codice macchina usi codici binari per la rappresentazione di operazioni e indirizzi di memoria.

Esegue anche la forma più semplice di assemblatore due passaggi sopra l'ingresso. Il primo passaggio rileva tutto identificatori nel codice assembly che indica la posizione di archiviazione e memorizzarli nel file tabella dei simboli (diverso dalla tabella dei simboli dei compilatori). Il posizione di archiviazione assegnata all'identificatore riscontrato nel primo passaggio.

Nel secondo passaggio, l'input viene nuovamente scansionato e questa volta il codice operativo siamo tradotto in un sequenza di bit che rappresenta tale operazione nel codice macchina. Anche il secondo passaggio si traduce identificatori dentro indirizzi definito nella tabella dei simboli. Quindi il secondo passaggio genera il codice macchina trasferibile.

  1. La differenza chiave tra compilatore e assemblatore è che compilatore genera codice assembly e alcuni compilatori possono anche generare direttamente codice eseguibile mentre, il assembler genera un codice macchina trasferibile.
  2. Il compilatore accetta come input il codice preelaborato generato dal preprocessore. D'altra parte, l'assemblatore prende codice assembly come input.
  3. La compilazione si svolge in due fasi che sono fase di analisi e fase di sintesi. In fase di analisi, l'input passa attraverso analizzatore lessicale, analizzatore di sintassi, analizzatore semantico considerando che l'analisi di sintesi avviene tramite generatore di codice intermedio, ottimizzatore di codice, generatore di codice. D'altra parte, l'assemblatore passa l'input attraverso due fasi. La prima fase rileva gli identificatori e gli assegna gli indirizzi nella seconda fase il codice assembly viene tradotto in codice binario.
  4. Il codice assembly generato dal compilatore è a versione mnemonica del codice macchina. Tuttavia, il codice macchina trasferibile generato dall'assemblatore è a codice binario rilocabile.

Conclusione:

L'assemblatore potrebbe non essere necessario poiché alcuni compilatori generano direttamente il codice eseguibile. Se si utilizza l'assemblatore, è necessario il linker per collegare tutte le librerie integrate alle funzioni di libreria utilizzate nel codice sorgente.