Assembler

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Assembler steht sowohl für eine Klasse von Programmiersprachen, als auch für die zugehörigen Übersetzungsprogramme.

Computer verstehen ja nur ihren eigenen Maschinencode, eine lange Folge binärer Befehle. Die ersten Programme wurden auch tatsächlich in diesen Maschinensprachen geschrieben. Man nennt sie deswegen Programmiersprachen der 1. Generation.

Da diese Art zu programmieren unpraktisch, zeitraubend und fehleranfällig ist, kamen Mitte des 20. Jahrhunderts die ersten symbolischen oder Assemblersprachen in Gebrauch. Diese Programmiersprachen der 2. Generation erlauben es, Programme mit Hilfe von symbolischen Befehlen, sogenannten Mnemonics, zu schreiben.

Solch ein symbolisches Programm (Assemblerprogramm) muss erst noch mit einem sogenannten Assembler in ein Maschinenprogramm (Objectcode) übersetzt werden, damit es auf dem Computer direkt ablauffähig ist.

Der Begriff Mnemonics wurde übrigens bereits von Lady Ada Augusta Lovelace (1815-1852) eingeführt, dem ersten Menschen, der nachweislich ein Programm geschrieben hat. Typische Mnemonics sind z. B. ADD, SUB, oder MOV.

Assembler, die auf einer Hostplattform H laufen, aber Objectcode für eine andere Zielplattform T erzeugen, nennt man Crossassembler. Sie werden heute typischerweise für Mikrocontroller und DSPs verwendet. Man möchte ja z. B. Waschprogramme nicht direkt auf der Waschmaschine entwickeln, sondern lieber bequem auf einem PC.

Bei der Portierung elementarer Software (Betriebssystemkerne, Treiber) auf neue Hardwareplattformen werden Crossassembler gelegentlich auch zur Neukodierung maschinenabhängiger Teile benötigt.

Ein Assembler, der mit Hilfe von sogenannten Makros vor der eigentlichen Assemblierung eine Textersetzung (Substitution) im Quellprogramm durchführen kann, heißt Makroassembler. Die Makrobefehle selbst gehören dabei nicht mit zur Assemblersprache, sondern überlagern sie vielmehr als Metasprache.

Alle Assemblersprachen sind naturgemäß stark maschinenabhängig. Deshalb sind Assemblerprogramme praktisch nicht auf andere Prozessorfamilien portierbar. Darum verwendet man heute, wenn möglich, lieber Programmiersprachen, die von der Prozessorebene abstrahieren, sogenannte höhere Programmiersprachen (HLL). Diese heißen auch Programmiersprachen der 3. Generation.

Für Desktopsysteme kommen Assembler nur noch selten zum Einsatz. Bei Embedded Systems haben die Assembler ihre Nische jedoch bis heute hartnäckig verteidigen können. Portierbarkeit ist wegen der großen Hardwarenähe ohnehin meist illusorisch. In Assembler kann man jedoch sehr schnelle und kompakte Programme schreiben. Das hilft, die Hardwarekosten zu senken.

Siehe auch

Weblinks