Diferența dintre compilator și montator

Autor: Laura McKinney
Data Creației: 1 Aprilie 2021
Data Actualizării: 11 Mai 2024
Anonim
Am PIERDUT 3000€ pentru 1CM de TERMOIZOLATIE la #casașoflete. Stratificații nZEB ROCKWOOL.
Video: Am PIERDUT 3000€ pentru 1CM de TERMOIZOLATIE la #casașoflete. Stratificații nZEB ROCKWOOL.

Conţinut


Compiler și Assembler joacă un rol important în execuția unui program. Unele compilatoare generează direct codul executabil în locul codului de asamblare. Compilatorul preia codul sursă preprocesat și îl traduce în codul de asamblare. Asamblatorul preia codul de asamblare de la compilator și îl traduce în codul mașinii relocabile. În acest articol, am discutat diferențele dintre compilator și asamblator cu ajutorul graficului de comparație prezentat mai jos, trebuie doar să aruncați o privire.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațieCompilator montator
De bazăGenerează codul limbajului de asamblare sau direct codul executabil.Generează codul mașinii relocabile.
IntrareCod sursă preprocesat.Codul limbajului de asamblare.
Faze / treceriFazele de compilare sunt analizor lexical, analizator de sintaxă, analizor semantic, generare intermediară de cod, optimizare de cod, generare de coduri.Assembler face două treceri peste intrarea dată.
producțieCodul de asamblare generat de compilator este o versiune mnemonică a codului mașinii.Codul mașinii relocabile generat de un asamblator este reprezentat de codul binar.


Definiția Compiler

compilator este un program de calculator care citește programul scris într-o limbă sursă, îl traduce în echivalent limbaj de asamblare și transmite codul limbajului de asamblare către montator. În timp ce traducerea codului sursă la codul de asamblare, compilatorul raportează de asemenea eroare în codul sursă utilizatorului său.

Compilatoarele sunt, de asemenea, clasificate ca single-pass, multi-pass, load-and-go, depanare și optimizare. Clasificarea se face pe baza funcției pe care o realizează un compilator și a modului în care a fost construit. În ciuda acestor complexități, sarcina de bază a compilatorului rămâne aceeași.

Compilația este realizată în două părți, partea de analiză și partea de sinteză. partea de analiză sparge codul sursă în piese constitutive și formează reprezentarea intermediară a codului sursă. partea de sinteză formează codul țintă din reprezentarea intermediară.


Compilația este realizată în următoarele faze:

Analizator lexical, analizator de sintaxă, analizor semantic, generator de cod intermediar, optimizator de coduri, generator de coduri, tabel de simboluri și manipulator de erori.

  • analizator lexical citește caracterele codului sursă și le grupează în fluxuri de jetoane. Fiecare jeton reprezintă secvența logică de caractere ca cuvinte cheie, identificatori, operatori. Secvența de caracter care formează un jeton este numită lexem.
  • analizator de sintaxă analizează jetonul obținut din analizorul lexical și grupează token-urile într-un structura ierarhica.
  • analizator semantic verifică codul sursă pentru orice eroare semantică.
  • Generator de cod intermediar generează reprezentare intermediară a codului sursă
  • optimizator de cod optimizează codul intermediar în codul mașinii care rulează mai rapid.
  • generator de cod în cele din urmă generează codul țintă care este a cod de mașină relocabil sau cod de asamblare.
  • tabel simbol este o structură de date care conține înregistrarea pentru fiecare identificator din codul sursă.
  • Gestorul erorilor detectează eroarea în fiecare fază și gestionează acele erori.

Definiția Assembler

Unii compilatori îndeplinesc sarcina de asamblare și generează direct un cod de mașină relocabil în loc de cod de asamblare, care este transmis mai departe direct pe linker / loader. montator ia ca intrare codul de asamblare generat de compilator și îl traduce în codul mașinii relocabile.

Să vedem cum este diferit codul mașinii de codul de asamblare. Codul de asamblare este mnemonic versiunea codului mașinii. Înseamnă că codul de asamblare folosește nume pentru reprezentarea operațiilor și chiar dă nume adreselor de memorie. Pe de altă parte, Codul mașinii utilizări coduri binare pentru reprezentarea operațiunilor și adreselor de memorie.

Chiar și cea mai simplă formă de asamblare are performanță două treceri peste intrare. prima trecere detectează toate identificatorii în codul de asamblare care denotă locația de stocare și le stochează în tabel simbol (altul decât tabelul cu simboluri compilatoare). locația de stocare este atribuită la identificatorul întâlnit în prima trecere.

În a doua trecere, intrarea este scanată din nou, și de data aceasta cod de operare sunt tradus intr-o secvență de biți reprezentând acea operație în codul mașinii. A doua trecere se traduce și ea identificatorii în adrese definit în tabelul de simboluri. Astfel a doua trecere generează codul mașinii relocabile.

  1. Diferența cheie între compilator și asamblator este că compilator generează codul de asamblare, iar unele compilatoare pot genera, de asemenea, cod executabil, în timp ce, montator generează cod de mașină relocat.
  2. Compilatorul ia ca intrare cod preprocesat generate de preprocesor. Pe de altă parte, asamblatorul ia cod de asamblare ca intrare.
  3. Compilația are loc în două faze care sunt faza de analiză și faza de sinteză. În faza de analiză, intrarea trece analizator lexical, analizator de sintaxă, analizor semantic în timp ce, analiza de sinteză are loc prin generator de cod intermediar, optimizator de coduri, generator de cod. Pe de altă parte, asamblatorul trece intrarea două faze. Prima fază detectează identificatorii și alocă adresele acestora în a doua fază, codul de asamblare este tradus în cod binar.
  4. Codul de asamblare generat de compilator este a versiune mnemonică a codului mașinii. Cu toate acestea, codul mașinii relocabile generat de asamblator este un cod binar relocabil.

Concluzie:

Este posibil să nu fie necesar asamblatorul, deoarece unele compilatoare generează direct cod executabil. Dacă se folosește asamblatorul, este nevoie de linker pentru a conecta toate bibliotecile încorporate la funcțiile de bibliotecă utilizate în codul sursă.