Unterschied zwischen Compiler und Assembler

Autor: Laura McKinney
Erstelldatum: 1 April 2021
Aktualisierungsdatum: 25 April 2024
Anonim
Unterschied zwischen Compiler und Interpreter
Video: Unterschied zwischen Compiler und Interpreter

Inhalt


Compiler und Assembler spielen eine wichtige Rolle bei der Ausführung eines Programms. Einige Compiler generieren direkt den ausführbaren Code anstelle des Assemblycodes. Der Compiler nimmt den vorverarbeiteten Quellcode und übersetzt ihn in den Assembler-Code. Der Assembler entnimmt den Assembler-Code dem Compiler und übersetzt ihn in den umsetzbaren Maschinencode. In diesem Artikel habe ich die Unterschiede zwischen Compiler und Assembler anhand der folgenden Vergleichstabelle erläutert.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichCompiler Assembler
BasicErzeugt den Assembler-Code oder direkt den ausführbaren Code.Erzeugt den umsetzbaren Maschinencode.
EingangVorverarbeiteter Quellcode.Assembler-Code.
Phasen / PässeDie Kompilierungsphasen sind lexikalischer Analysator, Syntaxanalysator, semantischer Analysator, Zwischencodegenerierung, Codeoptimierung und Codegenerierung.Assembler macht zwei Durchgänge über die angegebene Eingabe.
AusgabeDer vom Compiler generierte Assemblycode ist eine mnemonische Version des Maschinencodes.Der von einem Assembler erzeugte umsetzbare Maschinencode wird durch Binärcode dargestellt.


Definition von Compiler

Das Compiler ist ein Computerprogramm, das das in einer Ausgangssprache geschriebene Programm liest und in ein gleichwertiges übersetzt Assemblersprache und leitet den Assemblersprachencode an die weiter Assembler. Während der Übersetzung des Quellcodes in Assembler-Code meldet der Compiler auch die Error im Quellcode an seinen Benutzer.

Compiler werden auch als klassifiziert Single-Pass, Multi-Pass, Load-and-Go, Debugging und Optimierung. Die Klassifizierung erfolgt anhand der Funktionen, die ein Compiler ausführt, und anhand der Art und Weise, wie er konstruiert wurde. Trotz dieser Komplexität bleibt die Grundaufgabe des Compilers gleich.

Die Zusammenstellung besteht aus zwei Teilen: Analyseteil und Syntheseteil. Das Analyseteil zerlegt den Quellcode in Bestandteile und bildet die Zwischendarstellung des Quellcodes. Das Syntheseteil bildet den Zielcode aus der Zwischendarstellung.


Die Kompilierung erfolgt in folgenden Phasen:

Lexikalischer Analysator, Syntaxanalysator, Semantischer Analysator, Zwischencode-Generator, Code-Optimierer, Code-Generator, Symboltabelle und Fehlerbehandler.

  • Das lexikalischer Analysator liest die Zeichen des Quellcodes und gruppiert sie in die Ströme von Token. Jedes Token repräsentiert die logische Folge von Zeichen wie Schlüsselwort, Bezeichner, Operatoren. Die Zeichenfolge, aus der ein Token besteht, wird aufgerufen Lexem.
  • Das Syntax Analyzer analysiert das vom lexikalischen Analysator erhaltene Token und gruppiert Token in a hierarchische Struktur.
  • Das Semantic Analyzer prüft den Quellcode für alle semantischer Fehler.
  • Zwischencode-Generator erzeugt die Zwischendarstellung des Quellcodes
  • Das Code-Optimierer optimiert den Zwischencode in einen schneller laufenden Maschinencode.
  • Das Code Generator erzeugt schließlich den Zielcode, der a ist umsetzbarer Maschinencode oder Montagecode.
  • Das Symboltabelle ist eine Datenstruktur, die den Datensatz für jeden Bezeichner im Quellcode enthält.
  • Fehlerbehandler Erkennt den Fehler in jeder Phase und behandelt diese Fehler.

Definition von Assembler

Einige Compiler führen die Aufgabe des Assemblers aus und generieren direkt einen verschiebbaren Maschinencode anstelle des Assemblercodes, der direkt an den Linker / Loader weitergeleitet wird. Das Assembler Nimmt als Eingabe den vom Compiler generierten Assembler-Code und übersetzt ihn in umsetzbarer Maschinencode.

Lassen Sie uns sehen, wie sich der Maschinencode vom Assemblercode unterscheidet. Assembler-Code ist der Gedächtnisstütze Version des Maschinencodes. Dies bedeutet, dass der Assembly-Code Namen zur Darstellung von Operationen verwendet und den Speicheradressen sogar Namen gibt. Auf der anderen Seite die Maschinensprache Verwendet Binärcodes zur Darstellung von Operationen und Speicheradressen.

Selbst die einfachste Form des Assemblers führt zwei Pässe über den Eingang. Das erster Pass erkennt alle Bezeichner im Assemblycode, der den Speicherort angibt, und speichern Sie sie im Symboltabelle (außer Compiler-Symboltabelle). Das Lagerort zugeordnet ist auf die Kennung, die im ersten Durchgang angetroffen wird.

In dem zweiter Durchgangwird die Eingabe erneut gescannt und diesmal die Operationscode sind übersetzt in ein Folge von Bits Darstellen dieser Operation im Maschinencode. Der zweite Durchgang übersetzt ebenfalls Bezeichner in die Adressen in der Symboltabelle definiert. Somit erzeugt der zweite Durchgang das umsetzbarer Maschinencode.

  1. Der Hauptunterschied zwischen Compiler und Assembler besteht darin, dass Compiler generiert Assembler-Code und einige Compiler können auch direkt ausführbaren Code generieren Assembler generiert umsetzbaren Maschinencode.
  2. Der Compiler nimmt als Eingabe die vorverarbeiteter Code vom Präprozessor generiert. Auf der anderen Seite nimmt der Assembler Assembler-Code als Eingabe.
  3. Die Zusammenstellung erfolgt in zwei Phasen Analysephase und Synthesephase. In der Analysephase wird die Eingabe durchlaufen lexikalischer Analysator, Syntaxanalysator, semantischer Analysator wohingegen die Syntheseanalyse über erfolgt Zwischencode-Generator, Code-Optimierer, Code-Generator. Andererseits leitet der Assembler die Eingabe durch zwei Phasen. In der ersten Phase werden die Bezeichner erkannt und ihnen Adressen zugewiesen. In der zweiten Phase wird der Assembler-Code in Binärcode übersetzt.
  4. Der vom Compiler generierte Assembler-Code ist a mnemonische Version des Maschinencodes. Der vom Assembler generierte umsetzbare Maschinencode ist jedoch a binärer verschiebbarer Code.

Fazit:

Der Assembler ist möglicherweise nicht erforderlich, da einige Compiler direkt ausführbaren Code generieren. Wenn Assembler verwendet wird, muss der Linker alle integrierten Bibliotheken mit den im Quellcode verwendeten Bibliotheksfunktionen verknüpfen.