Verschil tussen compiler en assembler

Schrijver: Laura McKinney
Datum Van Creatie: 1 April 2021
Updatedatum: 11 Kunnen 2024
Anonim
Interpreters and Compilers (Bits and Bytes, Episode 6)
Video: Interpreters and Compilers (Bits and Bytes, Episode 6)

Inhoud


Compiler en Assembler spelen een belangrijke rol bij de uitvoering van een programma. Sommige compilers genereren direct de uitvoerbare code in plaats van de verzamelcode. De compiler neemt de voorbewerkte broncode en vertaalt deze in de assemblagecode. De assembler neemt de assemblagecode van de compiler en vertaalt deze naar de verplaatsbare machinecode. In dit artikel heb ik de verschillen tussen compiler en assembler besproken met behulp van de onderstaande vergelijkingstabel, kijk maar eens.

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingCompiler Assembler
basis-Genereert de merktaalcode of direct de uitvoerbare code.Genereert de verplaatsbare machinecode.
InvoerVoorverwerkte broncode.Taalcode van de vergadering.
Fasen / passenDe compilatiefasen zijn lexical analyzer, syntax analyzer, semantische analyzer, tussentijdse codegeneratie, code-optimalisatie, codegeneratie.Assembler maakt twee passages over de gegeven invoer.
uitgangDe assemblagecode die door de compiler wordt gegenereerd, is een mnemonische versie van machinecode.De verplaatsbare machinecode die door een assembler wordt gegenereerd, wordt voorgesteld door binaire code.


Definitie van Compiler

De compiler is een computerprogramma dat het programma in een brontaal leest, vertaalt in equivalent montage taal en stuurt de assembleertaalcode door naar de Assembler. Terwijl de vertaling van de broncode naar de assemblagecode, rapporteert de compiler ook de fout in de broncode voor de gebruiker.

Compilers worden ook geclassificeerd als single-pass, multi-pass, load-and-go, foutopsporing en optimalisatie. Classificatie vindt plaats op basis van welke functie een compiler uitvoert en hoe deze is opgebouwd. Ondanks deze complexiteit blijft de basistaak van de compiler hetzelfde.

De compilatie wordt uitgevoerd in twee delen, analyse deel en synthese deel. De analyse deel breekt de broncode in samenstellende delen en vormt de tussenliggende weergave van de broncode. De synthese deel vormt de doelcode van de tussenliggende weergave.


De compilatie wordt uitgevoerd in de volgende fasen:

Lexical analyzer, syntax analyzer, semantic analyzer, tussentijdse codegenerator, code optimizer, codegenerator, symbooltabel en foutafhandeling.

  • De lexicale analysator leest de tekens van de broncode en groepeert ze in de stromen van tokens. Elk token vertegenwoordigt de logische reeks tekens zoals trefwoord, ID's, operatoren. De reeks tekens die een token vormt, wordt genoemd lexeme.
  • De syntaxisanalysator ontleedt het token verkregen van lexicale analysator en groepeert tokens in a hiërarchische structuur.
  • De semantische analysator controleert de broncode op eventuele semantische fout.
  • Tussenliggende codegenerator genereert de tussentijdse weergave van de broncode
  • De code Optimizer optimaliseert de tussenliggende code in een sneller draaiende machinecode.
  • De codegenerator genereert uiteindelijk de doelcode die a is verplaatsbare machinecode of montagecode.
  • De symbool tabel is een gegevensstructuur die het record voor elke identificatie in de broncode bevat.
  • Foutafhandeling detecteert de fout in elke fase en behandelt deze fouten.

Definitie van assembler

Sommige compilers voeren de taak van assembler uit en genereren direct een verplaatsbare machinecode in plaats van assemblagecode, die verder direct wordt doorgegeven aan linker / loader. De assembler neemt als invoer de assemblagecode gegenereerd door de compiler en vertaalt deze in verplaatsbare machinecode.

Laten we eens kijken hoe machinecode verschilt van assemblagecode. Vergadering code is de ezelsbruggetje versie van machinecode. Het betekent dat de assemblagecode namen gebruikt voor het weergeven van bewerkingen en zelfs namen geeft aan de geheugenadressen. Aan de andere kant, de machine code toepassingen binaire codes voor weergave van bewerkingen en geheugenadressen.

Zelfs de eenvoudigste vorm van assembler werkt twee passen over de invoer. De eerste Paas detecteert alle identifiers in de assemblagecode die opslaglocatie aangeeft en bewaar ze in de symbool tabel (anders dan de compilers-symbooltabel). De opslaglocatie is toegewezen naar de identificatie die in de eerste passage wordt aangetroffen.

In de tweede pas, wordt de invoer opnieuw gescand en deze keer de operatie code zijn vertaalde in een reeks bits die die bewerking in de machinecode vertegenwoordigt. De tweede passage vertaalt zich ook identifiers in de adressen gedefinieerd in de symbolentabel. Aldus genereert de tweede doorgang de verplaatsbare machinecode.

  1. Het belangrijkste verschil tussen compiler en assembler is dat de compiler genereert assemblagecode en sommige compilers kunnen ook direct uitvoerbare code genereren, terwijl de assembler genereert verplaatsbare machinecode.
  2. De compiler neemt als invoer de voorverwerkte code gegenereerd door preprocessor. Aan de andere kant neemt de assembler montage code als invoer.
  3. De compilatie vindt plaats in twee fasen die zijn analyse fase en synthesefase. In de analysefase gaat de invoer door lexicale analysator, syntaxisanalysator, semantische analysator terwijl de synthese-analyse plaatsvindt via tussentijdse codegenerator, code-optimizer, codegenerator. Aan de andere kant geeft assembler de invoer door twee fasen. De eerste fase detecteert de identificatiegegevens en wijst daaraan adressen toe. In de tweede fase wordt de assemblagecode vertaald naar binaire code.
  4. De door de compiler gegenereerde montagecode is een geheugensteuntje van machinecode. De door de assembler gegenereerde verplaatsbare machinecode is echter een binaire verplaatsbare code.

Gevolgtrekking:

De assembler is mogelijk niet nodig omdat sommige compilers direct uitvoerbare code genereren. Als assembler wordt gebruikt, is een linker vereist om alle ingebouwde bibliotheken te koppelen aan de bibliotheekfuncties die in de broncode worden gebruikt.