Definition „Assemblierer“ Was ist ein Assembler?

Autor / Redakteur: chrissikraus / Stephan Augsten

Assembler sind Programme, die Assemblercode in Maschinensprache, sprich Binärcode übersetzen. Sie arbeiten sehr nahe an der Prozessorarchitektur und gelten daher als besonders effizient und sparsam.

Anbieter zum Thema

Assembler können den vollständigen Befehlssatz eines Prozessors nutzen.
Assembler können den vollständigen Befehlssatz eines Prozessors nutzen.
(Bild: bodkins18 - Pixabay.com / CC0 )

Ein Assembler übersetzt in Assemblersprache verfassten Code direkt in Binärcode, wobei der Code manuell oder maschinell erstellt sein kann. Manche Compiler wandeln Programmcode beispielsweise zunächst in Assemblercode um und rufen anschließend einen Assembler auf. Dieser fungiert wiederum selbst als Compiler und erstellt als abschließenden Schritt den Maschinencode.

Assemblerprogramme können den vollständigen Befehlssatz eines Prozessors nutzen, denn für jeden Assemblerbefehl existiert genau ein Gegenstück auf Maschinenebene. Moderne Hochsprachen beschränken sich hingegen auf eine Auswahl aus dem Befehlssatz. Deshalb bieten manche Sprachen die Möglichkeit, bei Bedarf Assemblercode zu integrieren.

Jede Architektur spricht eine eigene Sprache

Jeder Prozessor besitzt eine eigene Architektur und einen eigenen Befehlssatz, mit dem diese angesprochen werden kann. Jeder Prozessor benötigt deshalb einen ganz eigenen, auf ihn abgestimmten Assembler inklusive eigener Assemblersprache.

Nur in dieser Sprache verfasster Code kann von dem zugehörigen Assembler verstanden und übersetzt werden. Ein Programm für Prozessor A kann also von Prozessor B nicht ohne Änderungen verwertet werden - Assemblerprogramme sind stark plattformabhängig. Teilweise unterscheiden sich einzelne Assemblersprachen nur minimal.

In einigen Fällen ist es deshalb relativ simpel, ein Programm für einen neuen Prozessor anzupassen. Die Unterschiede können aber auch so groß sein, dass Programme komplett neu entwickelt werden müssen, bevor sie auf eine andere Architektur übertragen werden können.

Assemblersprache: Programme für Assembler schreiben

Zu jedem Assembler gibt es wie bereits erwähnt eine eigene Sprache, die auf die jeweilige Zielarchitektur abgestimmt ist. Mit Assemblersprache (kurz: Assembler) kann ein Programmierer Code schreiben, der direkt von einem Assembler verarbeitet werden kann. Assemblerprogramme kann ein Assembler also ohne Umwege in Maschinencode umwandeln.

Die Programmiersprache verwendet mnemonische Kürzel für die internen Befehle des Prozessors, mit denen simple logische und arithmetische Operationen sowie Registerzugriffe und der Programmfluss gesteuert werden können. Je nach Prozessorarchitektur können noch weitere Operationen hinzukommen.

Maschinennahe Programmierung kann Performance verbessern

Der Vorteil von Assemblercode ist, dass die Umwandlung in Binärcode sehr performant ist: Die Assemblersprache arbeitet sehr nahe an der jeweiligen Architektur und kann daher extrem schnell und mit minimalem Speicherbedarf übersetzt werden. Die Befehle können praktisch 1:1 übersetzt werden und müssen nicht erst analysiert und in Zwischensprachen übertragen werden.

In vielen Fällen erzielen die Compiler moderner Hochsprachen jedoch eine vergleichbare oder bessere Leistung. Vor allem komplexere Architekturen erfordern ein hohes Kontextwissen, damit alle Ressourcen jederzeit optimal genutzt werden können - fehlt dem Programmierer dieses Wissen, leidet die Performance.

Reine Assemblerprogrammierung ist heute eher selten

Speicher und Rechenleistung sind heute so preiswert, dass sich der Aufwand hauptsächlich noch für die Optimierung enorm zeitkritischer Systeme lohnt, zum Beispiel um bei wissenschaftlichen Berechnungen Sekundenbruchteile zu gewinnen. Außerdem wird die Sprache häufig noch zu Lehrzwecken verwendet, eben weil sie sehr eng mit der Prozessorarchitektur verbunden ist und so beispielsweise die Arbeitsweise von Prozessoren verdeutlicht.

Insgesamt wirkt Assemblersprache nach heutigen Standards sehr limitiert und umständlich. Die Programme sind beispielsweise fast garantiert länger als vergleichbarer Code in einer Hochsprache, weil komplexe Operationen nicht teil des Befehlssatzes sind und deshalb selbst nachprogrammiert werden müssen. Zudem sind insbesondere lange Assemblerprogramme schwer wartbar, weil der minimalistische Code oft nicht ganz einfach nachvollziehbar ist.

(ID:45501003)