Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Assembler (Informatik)

Ein Assembler (auch Assemblierer) ist ein Computerprogramm, das Quelltext in Maschinensprache übersetzt. Der Quelltext eines Assemblerprogramms ist in …

Inhalt6 Abschnitte
  1. 1. Was ist ein Assembler?
  2. 2. Assemblersprache und maschinennahe Programmierung
  3. 3. Abgrenzung zu Hochsprachencompilern
  4. 4. Aufgaben eines Assemblers
  5. 5. Spezialformen: Cross-Assembler, Disassembler, Maschinensprachemonitor
  6. 6. Hersteller und Produkte

Was ist ein Assembler?

Ein Assembler (auch Assemblierer) ist ein Computerprogramm, das Quelltext in Maschinensprache übersetzt. Der Quelltext ist dabei in Textform mit Hilfe mnemonischer Symbole in Assemblersprache geschrieben. Assembler gehören zu den Werkzeugen, die Programmierer verwenden. Der erste Assembler wurde zwischen 1948 und 1950 von Nathaniel Rochester auf dem Computersystem IBM 701 implementiert; der erste bekannte Quelltext in Assemblersprache findet sich in Kathleen und Andrew Donald Booths 1947 erschienenem Werk „Coding for A.R.C.“.

Assemblersprache und maschinennahe Programmierung

Maschinennahe Programmierung – die Domäne der Assemblersprache – kann heute fast vollständig durch höhere Programmiersprachen abgedeckt werden. Auf der anderen Seite steht die erschwerte Wartbarkeit von Assemblerprogrammen: Für optimalen Code wird immer mehr Kontextwissen benötigt, zum Beispiel zur Cachenutzung, Lokalität und temporalen Nutzung. Ein Beispiel ist der SSE-Befehl movntq, der wegen fehlenden Kontextwissens von Compilern nicht oder nur sehr spekulativ eingesetzt werden kann. Die meisten Compiler für höhere Sprachen nutzen jedoch nur einen kleinen Teil des Befehlssatzes der CPU (was zur Entwicklung von RISC-Prozessoren beitrug), während der Assemblerprogrammierer den vollständigen Befehlssatz zur Verfügung hat und so in manchen Situationen effizientere Befehle verwenden kann. Viele Programmiersysteme erlauben zudem, Assemblerbefehle mittels Inline-Assembler in den Quelltext höherer Sprachen zu integrieren. Wichtig: Verschiedene Prozessorarchitekturen haben grundverschiedene Assembler- und Maschinensprachen, daher wird jeweils ein zur Architektur passender Assembler benötigt und die Programme sind nicht oder nur unter großen Einschränkungen portabel. Makroassembler gestatten die Bildung parametrisierbarer Anweisungen; eine Makroanweisung wird im Allgemeinen in mehr als einen Maschinenbefehl umgesetzt.

Abgrenzung zu Hochsprachencompilern

Assembler sind immer spezifisch auf einen oder wenige Prozessortypen ausgerichtet. Für die IA32-Architektur unterscheiden sich Assembler und Assemblersprache beispielsweise vollständig von denen der MIPS-Architektur. Manche Hochsprachencompiler übersetzen ein Programm zuerst in Assemblersprache und rufen dann einen Assembler zur Erzeugung der Maschinensprache auf. Hochsprachen orientieren sich eher an der menschlichen Sprache und sind leicht verständlich, Assemblersprache orientiert sich eng an der Maschine: Die Opcodes und Referenzen von Datenfeldern (wie add BETRAG,SUMME) entsprechen als sogenannte Mnemonics dem Befehlssatz der jeweiligen CPU, dessen Verständnis daher Voraussetzung ist. In einer Hochsprache muss man sich kaum um die darunterliegende CPU kümmern; an einen Compiler werden zudem ganz andere Ansprüche gestellt, etwa beim Erfassen des Laufzeitverhaltens, bei rekursiven Funktionen, bei der Generierung großer Mengen zusätzlichen Quellcodes (etwa Templates) oder bei Compile-Time-Function-Evaluation. Obwohl vereinfacht und nicht immer zutreffend, wird die Unterscheidung häufig darin gesehen, dass ein Compiler einzelne Quelltextanweisungen in jeweils mehrere Maschinenbefehle überführt, während beim Assembler typischerweise eine Eins-zu-Eins-Abbildung vorliegt.

Aufgaben eines Assemblers

Zu den Aufgaben eines Assemblers gehören unter anderem: das Umsetzen von Befehlsmnemonics in Maschinenbefehle (z. B. „CLI“ in „11111010“, hexadezimal 'FA'); das Umsetzen von Datenmnemonics in ihre binäre Repräsentation (z. B. „BETRAG“ in Adresse=4711 und Länge=8); Verwaltung von Konstanten und von Adressen von Befehlen oder Daten; das Berechnen zur Übersetzungszeit feststehender Konstanten (z. B. mov eax, 45 + 67 + OFFSET ProgrammStart); das Ignorieren von Kommentaren bei der Codegenerierung; das Inkludieren anderer Programmcode-Dateien; das Interpretieren und Transformieren von Makrocode; bedingtes Übersetzen; das Bündeln zusammengehörender Daten (z. B. schreibgeschützte Daten); das Zurückweisen von für den Prozessor oder Modus nicht erlaubten Befehlen; das Einbinden von Debugging-Informationen oder anderen Metadaten; das Erzeugen von Übersetzungs-Listings sowie das Erzeugen von Maschinencode, gegebenenfalls als Objektdateien für zweistufige Übersetzungsprozesse mit Linker und der Möglichkeit zur Einbindung weiterer Programmteile (z. B. Unterprogramme) aus Bibliotheken.

Spezialformen: Cross-Assembler, Disassembler, Maschinensprachemonitor

Ein Cross-Assembler läuft auf einer Computerplattform H (Host) und erzeugt Maschinencode für eine andere Plattform T (Target); er ist damit ein spezieller Cross-Compiler. Er wird vor allem bei der Entwicklung eingebetteter Systeme eingesetzt, um schnellen und kompakten Code für Mikrocontroller und DSPs zu erstellen. Ein Beispiel ist der Cross-Assembler ASEM-51, der auf MS-DOS, Windows und Linux läuft und Code für die Intel-Mikrocontrollerfamilie MCS-51 erzeugt. Ein Disassembler übersetzt Maschinensprache zurück in Assemblersprache. Das ist möglich, weil es – anders als bei Hochsprachen – eine Eins-zu-Eins-Beziehung zwischen einfacher Assemblersprache und Maschinensprache gibt. Bezeichner und Kommentare können jedoch nicht wiederhergestellt werden, da sie durch die Assemblierung verloren gehen; meist werden Assemblersprachen zudem um Makrofunktionalitäten ergänzt, sodass die direkte Abbildung nur noch teilweise möglich ist. Auf einigen Plattformen existiert eine sehr einfache Assembler-Version kombiniert mit der Möglichkeit, Programme interaktiv zu testen und zu analysieren – ein sogenannter Maschinensprachemonitor.

Hersteller und Produkte

Für die x86-Prozessoren-Familie und kompatible Prozessoren (z. B. Intels Pentium oder AMDs Athlon) sind der Microsoft Macro Assembler (MASM), der Borland Turbo Assembler (TASM) und der Netwide Assembler (NASM) weit verbreitet. Der Flat Assembler (FASM) bietet viele Features eines modernen Assemblers, und Yasm ist ein Rewrite von NASM unter BSD-Lizenz. Neben Assemblern mit Intel-Syntax gibt es solche für die AT&T-Syntax, wie den unter Linux hauptsächlich genutzten GNU Assembler (GAS), der ab Version 2.10 über die .intel_syntax-Direktive auch die Intel-Syntax unterstützt. Auf IBM-Großrechnern (System z) wird der High Level Assembler verwendet; Hercules-Anwender müssen entweder den veralteten Assembler-F benutzen oder den Tachyon Legacy Assembler, der unter Linux für z/Series läuft. Für die Intel-Mikrocontrollerfamilie MCS-51 (erster Vertreter: der 8051) gibt es den freien Macroassembler ASEM-51; es existieren bereits hunderte 8051-Derivate von über 50 Halbleiterherstellern.

Lernvideos zu Assembler (Informatik)

Weiterlesen

Assemblersprache Eine Assemblersprache, kurz auch Assembler genannt (von englisch to assemble ‚zusammenfügen'), ist eine Programmiersprache, die auf den Befehlsvorrat eines … Quelltext Quelltext, auch Quellcode (englisch source code) oder unscharf Programmcode genannt, ist in der Informatik der für Menschen lesbare, in einer … Maschinensprache Mit einem Assembler: Assemblersprachen formulieren die Prozessorbefehle des Maschinencodes als Mnemonics in einer einfachen Syntax. Dieser Quelltext wird … Höhere Programmiersprache Eine höhere Programmiersprache ist eine Programmiersprache zur Abfassung eines Computerprogramms, die in Abstraktion und Komplexität von der Ebene der … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten. Effizienz (Informatik) Die Effizienz eines Algorithmus ist seine Sparsamkeit bezüglich Ressourcen, Rechenzeit und Speicherplatz, die jener zur Lösung eines festgelegten Problems … Prozessorarchitektur Die Prozessorarchitektur bezieht sich auf die spezifische Struktur und Organisation eines Prozessors, der ein wesentlicher Bestandteil von Computern und … Parameter (Informatik) Parameter – (deutsch) auch Übergabewerte genannt – sind in der Informatik Variablen, durch die ein Computerprogramm (oft ein Unterprogramm) auf die … Opcode Ein spezielles Programm, der Assembler, erzeugt Maschinencode, indem es im Wesentlichen die Mnemonics durch ihre jeweiligen Opcodes ersetzt. Die meisten … Prozessor Aufbau und Funktionale Einheiten · Hauptprozessor (CPU) und Mehrprozessorkerne · Steuer- bzw. Leitwerk · Rechenwerk und Register · Datenleitungen · Caches und MMU. Rekursion Als Rekursion (lateinisch recurrere ‚zurücklaufen') wird ein prinzipiell unendlicher Vorgang bezeichnet, der sich selbst als Teil enthält oder mithilfe von sich … Generische Programmierung Generische Programmierung ist ein Verfahren zur Entwicklung wiederverwendbarer Software-Bibliotheken. Dabei werden Funktionen möglichst allgemein entworfen, …