Cross-Assembler

Cross-Assembler

Ein Assembler (nach DIN 44300: Assemblierer) ist ein Hilfsprogramm der Programmierung (Programmierwerkzeug), das ein in einer einfachen, maschinennahen Assemblersprache geschriebenes Programm in Maschinensprache (auch Maschinencode oder Nativer Code genannt) übersetzt. Er ist ein spezieller Compiler, der selbständig, aber auch in einer der letzten Phasen eines Compilers für eine Hochsprache eingesetzt wird.

Assembler wird häufig auch als Synonym für Assemblersprache benutzt.

Inhaltsverzeichnis

Beschreibung

Die zwingende Nutzung von Assemblersprache ist heutzutage selten erforderlich. Immer mehr an auch maschinennaher Programmierung – die Domäne von Assemblersprache – kann heute fast vollständig durch höhere Programmiersprachen abgedeckt werden. Auch steht der Möglichkeit der Erstellung effizienter Programme die erschwerte Wartbarkeit von Assemblerprogrammen gegenüber. Die Programmierung heutiger Prozessoren unter dem Aspekt der Geschwindigkeitsoptimierung wird immer komplexer, da zahlreiche Nebenbedingungen eingehalten werden müssen, ein gleichermaßen wachsendes Problem für die durchaus immer besser werdenden Compiler der Hochsprachen als auch für Programmierer in Assemblersprache. Für optimalen Code wird immer mehr Kontextwissen benötigt (zum Beispiel: Cachenutzung, Lokalität, temporale Nutzung etc.). Ein Beispiel hierfür wäre 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 für höhere Programmiersprachen nur einen kleinen Teil des Befehlssatzes der CPU (ein Sachverhalt, der zur Entwicklung von RISC-Prozessoren geführt hat), während dem Assemblerprogrammierer der vollständige Befehlssatz zur Verfügung steht, sodaß er in manchen Situationen effizientere Befehle benutzen kann, die dem reinen Hochsprachenprogrammierer nicht zugänglich sind. Einige Programmiersysteme für höhere Programmiersprachen gestatten es, Assemblersprachenbefehle mittels Inline-Assembler in den Quelltext 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.

Zu beachten ist, dass verschiedene Prozessorarchitekturen grundverschiedene Assembler- und Maschinensprachen haben, so dass jeweils ein zur aktuellen Architektur passender Assembler benötigt wird und die Programme nicht oder nur unter großen Einschränkungen portabel sind.

Makroassembler gestatten die Bildung von parametrisierbaren Befehlsgruppen. Eine Makroanweisung wird im allgemeinen in mehr als einen Maschinenbefehl umgesetzt.

Abgrenzung zu Hochsprachencompilern

Im Unterschied zu Compilern, die eine maschinenunabhängige, mehr oder weniger standardisierte Hochsprache wie zum Beispiel C oder Pascal in Maschinensprache übersetzen, sind Assembler immer spezifisch auf einen oder wenige Prozessortypen ausgerichtet. Assembler und Assemblersprache für die IA32-Architektur unterscheiden sich beispielsweise vollständig von beidem für die MIPS-Architektur.

Manche Hochsprachencompiler übersetzten ein Programm zuerst in Assemblersprache und rufen dann einen Assembler zur Erzeugung von Maschinensprache auf. Während sich Hochsprachen eher an der menschlichen Sprache orientieren und somit verhältnismäßig leicht verständlich sind, orientiert sich Assemblersprache eng an der Maschine. In Assemblersprache werden die Opcodes (Befehle) der jeweiligen CPU mit Namen, den sogenannten Mnemonics, versehen und bilden damit ein direktes Abbild des Befehlssatzes der CPU. Während man sich in einer Hochsprache kaum oder überhaupt nicht um die darunterliegende CPU kümmern muss, so ist das Verständnis dieser bei Assembler die Voraussetzung.

Spezialformen

Crossassembler

Ein Cross-Assembler ist eine Spezialform des Assemblers, der auf einer Computerplattform H (Host) läuft und Maschinencode für 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 für Mikrocontroller und DSPs zu erstellen.

Ein Beispiel ist der Cross-Assembler ASEM-51, der auf den Hostplattformen MS-DOS, Windows und Linux läuft. Er erzeugt Code für die Mikrocontrollerfamilie MCS-51 von Intel (Zielplattform).

Disassembler

Hauptartikel: Disassembler.

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 Makrofunktionalitäten ergänzt, so dass diese direkte Abbildung nur noch teilweise möglich ist.

Maschinensprachemonitor

Auf einigen Plattformen existiert eine sehr einfache Version eines Assemblers, kombiniert mit der Möglichkeit, Programme interaktiv zu testen und zu analysieren, die Maschinensprachemonitor genannt wird.

Hersteller und Produkte

Für 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 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 schließlich 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 (System z) 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.

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Cross Assembler —   [dt. »Kreuz Assembler«], ein Assembler, der auf einer bestimmten Hardware Plattform läuft, aber Maschinencode für eine andere Plattform erzeugt. Cross Assembler werden z. B. eingesetzt, wenn das Zielsystem, welches das lauffähige Programm… …   Universal-Lexikon

  • cross assembler — noun (computing) An assembler that runs on one computer, producing a machine code for a different computer • • • Main Entry: ↑cross …   Useful english dictionary

  • cross-assembler — …   Useful english dictionary

  • Assembler (Informatik) — Ein Assembler (nach DIN 44300: Assemblierer) ist ein Hilfsprogramm der Programmierung (Programmierwerkzeug), das ein in maschinennaher Assemblersprache geschriebenes Computerprogramm in Maschinensprache (auch Maschinencode oder Nativer Code… …   Deutsch Wikipedia

  • Assembler-Code — Eine Assemblersprache ist eine spezielle Programmiersprache, welche die Maschinensprache einer spezifischen Prozessorarchitektur in einer für den Menschen lesbaren Form repräsentiert. Jede Computerarchitektur hat folglich ihre eigene… …   Deutsch Wikipedia

  • Assembler — Assemblersprache * * * As|sem|bler auch: As|semb|ler 〈[ əsɛ̣mblə(r)] m. 3; unz.; EDV〉 1. maschinenorientierte, d. h. in ihrer Struktur einfache, sich stark an die Bauteile des EDV Geräts anlehnende Programmiersprache 2. Programm, das den in… …   Universal-Lexikon

  • Cross-Compiler — Crọss Compiler   [ kɔmpaɪlər, englisch], Informatik: ein Übersetzerprogramm (Compiler) für Programmiersprachen (speziell ein Assemblerprogramm beim Cross Assembler), das zur Übersetzung einen Computer benutzt, der sich in seiner Bauart und… …   Universal-Lexikon

  • Cross compiler — A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is run. Cross compiler tools are used to generate executables for embedded system or multiple platforms. It is used to… …   Wikipedia

  • GNU Assembler — Entwickler GNU Projekt Aktuelle Version 2.21 (8. Dezember 2010) Betriebssystem Cross platform Programmier­sprache C …   Deutsch Wikipedia

  • Turbo Assembler — Der Turbo Assembler (TASM) ist ein Assembler für x86er Prozessoren auf dem Betriebssystem MS DOS. Er wurde 1989 von der Firma Borland als Bestandteil von Turbo C 2.0 vorgestellt, war aber auch als separates Paket zusammen mit dem Turbo Linker… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”