Assembler
Was ist ein Assembler?
Ein Assembler ist eine Art von Computerprogramm, das grundlegende Anweisungen aufnimmt und sie in ein Muster von Bits umwandelt. Das Muster verwendet der Computer, um grundlegende Operationen auszuführen. Die Aufgabe des Assembler besteht darin, Assembler- oder Assemblersprachcode in Maschinencode umzuwandeln, den der Computer dann lesen und ausführen kann.
Einfach ausgedrückt ist ein Assembler eine Software, die in Assemblersprache geschriebene Anweisungen in computerlesbaren Maschinencode umwandelt. Er kann auch Low-Level-Assemblersprachcode in Maschinencode kompilieren oder umwandeln.
Der Assembler setzt während des Kompilierungsprozesses Assembler-Quellcode zusammen und wandelt ihn in Objektcode um. Der Objektcode wird in eine Reihe von Bits geschrieben, die der Computerprozessor dann direkt ausführen kann. Einige Assembler übersetzen nicht nur Assemblercode in Maschinencode, sondern ermöglichen auch die Verwendung von Steueranweisungen und Datenbankabstraktionsdiensten. Bestimmte Assembler unterstützen objektorientierte Programmstrukturen.
Wie Assembler funktionieren
Die meisten Computer werden mit einer Reihe von Grundbefehlen geliefert, die Assembler-Befehle genannt werden. Sie entsprechen den grundlegenden Maschinenoperationen, die der Computer ausführen kann. Beispielsweise veranlasst ein Ladebefehl den Prozessor, eine Reihe von Bits von einer Stelle im Prozessor in einen speziellen Speicherplatz – ein sogenanntes Register – zu übertragen.
Um den Quellcode zu schreiben, verwendet ein Programmierer eine Folge dieser Assembler-Anweisungen. Das Assemblerprogramm nimmt dann jede Anweisung im Quellprogramm und erzeugt einen entsprechenden Bitstrom oder ein Muster, das als Objektcode bezeichnet wird. Diese Ausgabe bleibt relativ zum eingegebenen Quellprogramm und wird dann nach Bedarf ausgeführt. Der Bitstrom, der das Objektprogramm bildet, wird Maschinencode genannt.
Der Assembler identifiziert die symbolischen Namen, die mit jeder Anweisung verbunden sind, und weist jeder Anweisung Speicher zu. Um die Speicheradressen der einzelnen Befehle zu verfolgen, führt er außerdem einen Programmzähler oder Location Counter (LC). Bei der Verarbeitung dieser Befehle wird der LC aktualisiert und der Zielmaschinencode erzeugt.
Arten von Assemblern
Assemblerprogramme schließen die Lücke zwischen Assemblersprache und Maschinensprache, die der Prozessor und der Arbeitsspeicher des Computers lesen können. Der Assembler-Typ wird dadurch definiert, wie oft das Programm den Quellcode scannen muss, um ihn in Maschinensprache zu übersetzen. Es gibt zwei Haupttypen von Assemblern.
Single Pass Assembler
Ein Single Pass oder One Pass Assembler übersetzt das gesamte Assembler-Programm in einem Durchgang in das entsprechende Maschinensprachprogramm. Der Assembler ersetzt in einem einzigen Prozess die pseudo-symbolischen Anweisungen im Assembler-Programm durch computerlesbaren Maschinencode.
Multipass Assembler
Bei einem Multipass Assembler scant der Assembler das Assemblerprogramm mehrfach, bevor es in den entsprechenden Maschinensprach-Avatar übersetzt wird. Im ersten Durchgang erzeugt der Assembler einen Symbolcode, in dem er die Pseudoanweisungen in Assembler-Sprache aufzeichnet und verarbeitet. Im zweiten Prozess erzeugt er den entsprechenden Maschinencode.
Assembler-Sprache
In den frühesten Computern schrieben die Programmierer ihre Programme in Maschinencode. Um die Programmierung zu beschleunigen, wurden mit der Zeit Assembler-Sprachen oder Befehlssätze entwickelt. Heute verwenden Programmierer Assembler-Programmierung zur effizienten Steuerung von Prozessoperationen. Diese Art der Programmierung erfordert aber Kenntnisse über den Befehlssatz eines bestimmten Computers.
Die Maschinensprache besteht ausschließlich aus den binären Ziffern 0 und 1. Das macht es schwierig, Programme zu schreiben, die für menschliche Benutzer verständlich sind. Die Assembler-Sprache verwendet Mnemonics: Das sind symbolische Darstellungen von spezifischem Code – bekannt als Operationscode – die für Programmierer intuitiv sein sollen. Diese Low-Level-Sprache überträgt Anweisungen an den Computerprozessor mit einer einfacheren Syntax.
Im Vergleich: Assembler und Compiler
Assembler und Compiler sind nicht dieselbe Art von Programm, auch wenn Assembler manchmal als Assembler-Compiler bezeichnet werden. Während sowohl Assembler als auch Compiler Maschinencode ausgeben, besteht der Hauptzweck eines Assemblers darin, Assembler-Sprache in die entsprechende Maschinensprache zu konvertieren. Im Gegensatz dazu wandelt ein Compiler High-Level-Quellcode wie beispielsweise C-, Java-, JavaScript- oder PHP-Code in Maschinensprachcode um. Während die Eingabe eines Compilers aus höherer Sprache besteht, besteht die Eingabe eines Assemblers also aus Low-Level-Code.
Ein weiterer Unterschied besteht darin, dass Assembler Quellcode in einem oder mehreren Durchläufen in Maschinencode umwandeln können. Die Umwandlung bei Compilern erfolgt fast immer in einem einzigen Durchgang. Assembler erzeugen Binärcode in einem Strom von 0en und 1en. Compiler erzeugen Maschinencode in Form von Mnemonics.