www.wikidata.de-de.nina.az
Dieser Artikel behandelt das Systemprogramm zur Ubersetzung von Assemblercode in Maschinencode Als Assembler wird auch die dabei zugrundeliegende Programmiersprache bezeichnet siehe Assemblersprache Ein Assembler auch Assemblierer 1 ist ein Computerprogramm das Quelltext in Maschinensprache ubersetzt Der Quelltext eines Assemblerprogramms ist in Textform mit Hilfe mnemonische Symbole in Assemblersprache geschrieben Assembler zahlen zu den von Programmierern verwendeten Werkzeugen Der erste Quelltext in dem Assemblersprache zur Darstellung von Maschinencode verwendet wird findet sich in Kathleen und Andrew Donald Booths 1947 erschienenem Werk Coding for A R C 2 Der erste Assembler wurde zwischen 1948 und 1950 von Nathaniel Rochester auf dem Computersystem IBM 701 implementiert Inhaltsverzeichnis 1 Beschreibung 2 Abgrenzung zu Hochsprachencompilern 3 Aufgaben eines Assembler 4 Spezialformen 4 1 Cross Assembler 4 2 Disassembler 4 3 Maschinensprachemonitor 5 Hersteller und Produkte 6 Weblinks 7 EinzelnachweiseBeschreibung BearbeitenImmer mehr an maschinennaher Programmierung die Domane von Assemblersprache kann heute fast vollstandig durch hohere Programmiersprachen abgedeckt werden Auch steht der Moglichkeit der Erstellung effizienter Programme die erschwerte Wartbarkeit von Assemblerprogrammen gegenuber Fur optimalen Code wird immer mehr Kontextwissen benotigt zum Beispiel Cachenutzung Lokalitat temporale Nutzung etc Ein Beispiel hierfur ware der SSE Befehl movntq welcher wegen fehlenden Kontextwissens nicht oder nur sehr spekulativ von Compilern eingesetzt werden kann Auf der anderen Seite benutzen die meisten Compiler fur hohere Programmiersprachen nur einen kleinen Teil des Befehlssatzes der CPU ein Sachverhalt der zur Entwicklung von RISC Prozessoren gefuhrt hat wahrend dem Assemblerprogrammierer der vollstandige Befehlssatz zur Verfugung steht sodass er in manchen Situationen effizientere Befehle benutzen kann die dem reinen Hochsprachenprogrammierer nicht zuganglich sind Einige Programmiersysteme fur hohere Programmiersprachen gestatten es Assemblersprachenbefehle mittels Inline Assembler in den Quelltext zu integrieren Die Anwendung kann sich dann auf die Situationen beschranken in denen es aus funktionalen oder Effizienzgrunden notwendig oder nutzlich ist maschinennah zu programmieren Zu beachten ist dass verschiedene Prozessorarchitekturen grundverschiedene Assembler und Maschinensprachen haben so dass jeweils ein zur aktuellen Architektur passender Assembler benotigt wird und die Programme nicht oder nur unter grossen Einschrankungen portabel sind Makroassembler gestatten die Bildung von parametrisierbaren Anweisungen Eine Makroanweisung wird im Allgemeinen in mehr als einen Maschinenbefehl umgesetzt Abgrenzung zu Hochsprachencompilern BearbeitenAssembler sind immer spezifisch auf einen oder wenige Prozessortypen ausgerichtet Fur die IA32 Architektur unterscheiden sich Assembler und Assemblersprache beispielsweise vollstandig von dem fur die MIPS Architektur Manche Hochsprachencompiler ubersetzen ein Programm zuerst in Assemblersprache und rufen dann einen Assembler zur Erzeugung von Maschinensprache auf Wahrend sich Hochsprachen eher an der menschlichen Sprache orientieren und somit verhaltnismassig leicht verstandlich sind orientiert sich Assemblersprache eng an der Maschine In Assemblersprache entsprechen die Opcodes und die Referenz von Datenfeldern wie add BETRAG SUMME als sogenannte Mnemonics dem Befehlssatz der jeweiligen CPU dessen Verstandnis ist somit bei Assembler Voraussetzung Dagegen muss man sich in einer Hochsprache kaum oder uberhaupt nicht um die darunterliegende CPU kummern Auch werden an einen Compiler ganz andere Anspruche zum Erfassen des Laufzeitverhaltens eines Programms gestellt besonders beim Treffen auf rekursive Funktionen oder grosse Mengen zusatzlichen Quellcodes generiert etwa Templates teilweise auch bereits beim Kompilieren Code ausgefuhrt Compile Time Function Evaluation Obwohl vereinfacht und nicht immer zutreffend wird die Unterscheidung haufig darin gesehen dass ein Compiler einzelne Anweisungen im Quelltext in jeweils mehrere Maschinenbefehle uberfuhrt wahrend bei einem Assembler hierbei typischerweise eine Eins zu Eins Abbildung vorliegt 3 Aufgaben eines Assembler BearbeitenUmsetzen von Befehlsmnemonics in der Anweisung einer Assemblersprache beispielsweise den Befehlscode CLI in den Befehlscode 11111010 hexadezimal FA einer Maschinensprache Umsetzen von Datenmnemonics in deren binare Reprasentation beispielsweise BETRAG in Adresse 4711 und Lange 8 Verwaltung von Konstanten Verwaltung von Adressen von Befehlen oder Daten Berechnen von zur Ubersetzungszeit feststehenden Konstanten mov eax 4 5 6 7 OFFSET ProgrammStart Ignorieren von Kommentaren bei der Codegenerierung Inkludieren anderer Programmcode Dateien Interpretieren und Transformieren von Makrocode Bedingtes Ubersetzen Bundeln von zusammengehorenden Daten z B schreibgeschutzte Daten Zuruckweisen von fur diesen Prozessor oder Modus nicht erlaubten Befehlen Einbinden von Debugging Informationen oder anderen Metadaten Erzeugen von Ubersetzungs Listings Erzeugen von Maschinencode ggf als Objektdateien fur zweistufige Ubersetzungsprozesse mit Linker und der Moglichkeit zur Einbindung weiterer Programmteile z B Unterprogrammen aus BibliothekenSpezialformen BearbeitenCross Assembler Bearbeiten Ein Cross Assembler ist eine Spezialform des Assemblers der auf einer Computerplattform H Host lauft und Maschinencode fur eine andere Computerplattform T Target erzeugt Er ist damit ein spezieller Cross Compiler Cross Assembler kommen heute vor allem bei der Entwicklung eingebetteter Systeme zum Einsatz um schnellen und kompakten Code fur Mikrocontroller und DSPs zu erstellen Ein Beispiel ist der Cross Assembler ASEM 51 der auf den Hostplattformen MS DOS Windows und Linux lauft Er erzeugt Code fur die Mikrocontrollerfamilie MCS 51 von Intel Zielplattform Disassembler Bearbeiten Hauptartikel Disassembler Ein Programm zum Ruckubersetzen von Maschinensprache in Assemblersprache wird als Disassembler bezeichnet Diese Ruckubersetzung ist moglich da es anders als bei Hochsprachen eine Eins zu Eins Beziehung zwischen einfacher Assemblersprache und Maschinensprache gibt Dabei konnen jedoch Bezeichner und Kommentare nicht wiederhergestellt werden da diese durch die Assemblierung verloren gehen Meist werden Assemblersprachen um Makrofunktionalitaten erganzt so dass diese direkte Abbildung nur noch teilweise moglich ist Maschinensprachemonitor Bearbeiten Auf einigen Plattformen existiert eine sehr einfache Version eines Assemblers kombiniert mit der Moglichkeit Programme interaktiv zu testen und zu analysieren die Maschinensprachemonitor genannt wird Hersteller und Produkte BearbeitenFur die x86 Prozessoren Familie und kompatible Prozessoren zum Beispiel Intels Pentium oder AMDs Athlon sind der Microsoft Macro Assembler MASM der Borland Turbo Assembler TASM und der Netwide Assembler NASM weit verbreitet Auch der Flat Assembler FASM bietet viele Features die ein moderner Assembler benotigt 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 amp T Syntax assemblieren konnen wie den unter Linux hauptsachlich genutzten GNU Assembler GAS GAS unterstutzt ab Version 2 10 uber die intel syntax Direktive auch die Intel Syntax 4 5 6 Auf IBM Grossrechnern System z wird der High Level Assembler verwendet Hercules Anwender mussen entweder den veralteten Assembler Assembler F benutzen oder aber den Tachyon Legacy Assembler verwenden welcher unter Linux fur z Series lauft Fur 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 uber 50 Halbleiterherstellern Weblinks Bearbeiten nbsp Wikibooks Assembler Programmierung fur x86 Prozessoren Lern und Lehrmaterialien The Art of Assembly Language Programming englisch MASM32 Package GCC Inline Assembly HOWTO englisch i8086 de 8086 88 Assembler Befehlsreferenz Kurze EinfuhrungEinzelnachweise Bearbeiten DIN 44300 Andrew D Booth Kathleen HV Britten Coding for A R C Institute for Advanced Study Princeton 1947 ias edu PDF abgerufen am 4 November 2022 Peter Calingaert Assemblers compilers and program translation Computer Science Press Potomac MD 1979 ISBN 0 914894 23 4 S 186 187 Ram Narayam Linux assemblers A comparison of GAS and NASM 17 Oktober 2007 abgerufen am 2 Juli 2008 Randall Hyde Which Assembler is the Best Abgerufen am 18 Mai 2008 GNU Assembler News v2 1 supports Intel syntax 4 April 2008 abgerufen am 2 Juli 2008 Abgerufen von https de wikipedia org w index php title Assembler Informatik amp oldid 237759629