„Assembler (Informatik)“ – Versionsunterschied

[ungesichtete Version][ungesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung
Zeile 40:Zeile 40:
* [http://webster.cs.ucr.edu/AoA.html The Art of Assembly Language Programming]
* [http://webster.cs.ucr.edu/AoA.html The Art of Assembly Language Programming]
* [http://www.robsite.de/tutorials.php?tut=assembly Tutorials]
* [http://www.robsite.de/tutorials.php?tut=assembly Tutorials]
* [http://www.codingcrew.de/Codeingcrew - MASM, Forum und mehr]
* [http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html GCC-Inline-Assembly-HOWTO]
* [http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html GCC-Inline-Assembly-HOWTO]
* [http://www.i8086.de/asm/8086-88-asm.html i8086.de 8086/88 Assembler Befehlsreferenz]
* [http://www.i8086.de/asm/8086-88-asm.html i8086.de 8086/88 Assembler Befehlsreferenz]

Version vom 25. Mai 2007, 11:10 Uhr

Ein Assembler in der Informatik ist ein spezieller Compiler, der ein in einer maschinennahen Assemblersprache geschriebenes Programm in Maschinensprache übersetzt. Oft wird der Ausdruck Assembler auch als Abkürzung oder Synonym für Assemblersprache verwendet.

Zu beachten ist, dass verschiedene Prozessorarchitekturen grundverschiedene Assembler- und Maschinensprachen haben, so dass jeweils ein zur aktuellen Architektur passender Assembler benötigt wird. Es gibt jedoch Assemblerfamilien, welche bei gleich bleibender Makrosprache und Arbeitsumgebung mehrere Prozessoren unterstützen (z. B. GNU Assembler).

Die einfachste Version eines Assemblers, kombiniert mit der Möglichkeit, Programme interaktiv zu testen und zu analysieren, wird Maschinensprachemonitor genannt. Makroassembler gestatten die Bildung von parametrisierbaren Befehlsgruppen. Eine Makroanweisung wird im allgemeinen in mehr als einen Maschinenbefehl umgesetzt.

Assemblersprache wird immer seltener eingesetzt. Der Möglichkeit der Erstellung effizienter Programme steht die erschwerte Wartbarkeit von Assemblerprogrammen gegenüber. Maschinennahe Programmierung – die Domäne von Assembler – kann heute fast vollständig durch höhere Programmiersprachen abgedeckt werden. Auch ist die Programmierung heutiger Prozessoren in Assemblersprache zur Geschwindigkeitsoptimierung schwierig, da zahlreiche Nebenbedingungen eingehalten werden müssen, damit der Prozessor in optimaler Geschwindigkeit läuft, während auf der anderen Seite optimierende Compiler für Hochsprachen immer besseren Code erzeugen und diese Bedingungen automatisch erfüllen können.
Einige Programmiersysteme für höhere Programmiersprachen gestatten es, Assemblerbefehle in den Quelltext mittels Inline-Assembler zu integrieren. Die Anwendung kann sich dann auf die Situationen beschränken, in denen es aus funktionalen oder Effizienzgründen notwendig oder nützlich ist, maschinennah zu programmieren.

Siehe auch: Cross-Assembler

Abgrenzung zu Hochsprachencompilern

Im Unterschied zu Compilern, die eine maschinenunabhängige, mehr oder weniger standardisierte Hochsprache wie z. B. C oder Pascal in Maschinensprache übersetzen, sind Assembler immer spezifisch auf einen oder wenige Prozessortypen ausgerichtet.

Beim Assembler werden die Opcodes der jeweiligen CPU mit Namen, den sogenannten Mnemonics, angegeben, während Hochsprachen die Umsetzung in Opcodes über mehrere automatisierte Abstraktionsebenen hinweg bewerkstelligen. Dadurch werden Eigenschaften wie etwa eine bestimmte Registerbreite vor dem Programmierer versteckt. In Assembler sind nur Operationen im Rahmen der möglichen Register- und Operationsgrößen der CPU möglich. Oftmals sind Pragma-, Präprozessor- und Makrofähigkeiten in Assemblern möglich, die sich aber nur bedingt mit den Möglichkeiten von Hochsprachen vergleichen lassen.

Assembler sind häufig extrem einfach aufgebaut und daher meist auch sehr schnell. Compiler hingegen übersetzen oft zunächst das Programm in eine Zwischensprache, die dann an einen Assembler weitergeleitet und in das letztlich benötigte Maschinenprogramm umgewandelt wird. Bei modernen Compilern erfolgt dieser Schritt implizit.

Ein Programm zum Rückübersetzen von Maschinensprache in Assemblersprache wird als Disassembler bezeichnet. Diese Rückübersetzung ist generell möglich, da es – anders als bei Hochsprachen – eine Eins-zu-Eins-Beziehung zwischen einfacher Assemblersprache und Maschinensprache gibt. Dabei können jedoch Bezeichner und Kommentare nicht wiederhergestellt werden, da diese durch die Assemblierung verloren gehen. Meist werden Assemblersprachen um Makrofähigkeiten ergänzt, so dass diese direkte Abbildung nur noch teilweise möglich ist.

Die Tätigkeit des Disassemblierens ist bei urheberrechtlich geschützten Programmen durch Copyright-Bestimmungen reglementiert bis verboten, da das Disassemblieren die Möglichkeit eröffnet, den Code einfach zu ändern und danach wieder in ein Programm zu assemblieren. So könnte z. B. von erfahrenen Assembler-Programmierern und Crackern eine Passwortabfrage entfernt, eine aus lizenzrechtlichen Gründen abgeschaltete Funktion aktiviert, oder ein Virus unbemerkt in das Programm eingeschleust werden. Ausführliche Erläuterungen zu diesem Aspekt von Disassemblern und vergleichbaren Werkzeugen finden sich im Artikel Reverse Engineering.

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 unter der LGPL verfügbare Netwide Assembler (NASM) weit verbreitet. Auch der Flat Assembler (FASM) bietet viele Features, die ein moderner Assembler benötigt. YASM schliesslich ist ein Rewrite von NASM unter BSD-Lizenz. Neben Assemblern, die die Intel-Syntax kennen, gibt es noch solche, die Assemblercode in der AT&T-Syntax assemblieren können, wie den unter Linux hauptsächlich genutzten GNU Assembler (GAS).

Auf IBM-Großrechnern (zSeries) wird der High Level Assembler verwendet, Hercules-Anwender müssen entweder den veralteten Assembler Assembler-F benutzen oder aber den Tachyon Legacy Assembler verwenden, welcher unter Linux für z/Series läuft.

Für die Mikrocontrollerfamilie MCS-51 von Intel, deren erster Vertreter der 8051 war, gibt es den freien Macroassembler ASEM-51. Heute gibt es bereits hunderte von 8051-Derivaten von über 50 Halbleiterherstellern.

Siehe auch: Betriebssystem

Wikibooks: Assembler – Lern- und Lehrmaterialien