Zum Inhalt springen

Assemblersprache

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 28. August 2002 um 12:50 Uhr durch Conversion script (Diskussion) (Automated conversion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Eine Assemblersprache ist eine durch den Menschen lesbare Form eines Computerprogrammes, das die Maschinensprache einer spezifischen Computerarchitektur repräsentiert.

Programmbefehle in Maschinensprache sind einfache Bitmuster, während in der Assemblersprache besser merkbare Kürzel, sogenannte mnemonische Symbole, verwendet werden.

Beispiel:

Der folgende Befehl in Maschinensprache

 10110000 01100001

entspricht dem Assemblerbefehl (für x86-Prozessoren)

 mov $0x61, %al

und bedeutet, dass der hexadezimale Wert 61 (97 dezimal) ins Register 'a1' geladen werden soll.

Anders als bei Hochsprachen gibt es eine 1-zu-1-Beziehung zwischen einfacher Assemblersprache und Maschinensprache. Mit Computerhilfe kann man das eine in das andere übersetzen. Das Übersetzen von Assemblersprache in Maschinensprache wird durch ein Programm durchgeführt, das man Assembler nennt, das Rückübersetzen von Maschinensprache in Assemblersprache von einem Disassembler. Häufig werden komplexere Assemblersprachen (Makroassembler) verwendet, um die Programmierarbeit zu erleichtern. Die einfache 1-zu-1 Abbildung ist dann u.U. für den Programmierer nicht mehr sichtbar. Anm: Auch Makroassembler übersetzen 1-zu-1 in Maschinensprache. Lediglich die Bedienung wird durch die Definition von Makros vereinfacht. Diese Makros werden aber durch die entsprechenden Befehle ersetzt, bevor der eigentliche Assembliervorgang durchgeführt wird. (Dann übersetzen aber auch C-Compiler 1-zu-1 in Maschinensprache, schließlich ist die Programmiersprache letztendlich nur die Bedienung des Assemblers innerhalb des C-Compilers...)

Jede Computerarchitektur hat ihre eigene Maschinensprache und damit Assemblersprache. Das Beispiel oben ist für den 80386. Die Sprachen unterscheiden sich in Anzahl und Typ der Operationen.

Jedoch haben alle Architekturen die folgenden grundlegenden Operationen:

  • Daten kopieren, lesen oder speichern
  • Arithmetische Operationen
  • Logische Operationen
  • Kontrolle des Programmflusses

Bestimmte Sprachen haben oft auch komplexere Befehle wie z.B.

  • Einen großen Speicherblock im Hauptspeicher verschieben
  • Höhere Arithmetik wie Sinus-, Cosinus- und Wurzelberechnung
  • Eine einfache Operation (z.B. Addition) auf einen Vektor von Werten anwenden

Es gibt unterschiedliche Ansichten zum Nutzen der direkten Programmierung in Assemblersprache. In vielen Fällen können moderne Compiler höhere Programmiersprachen in effizienten und schnellen Code übersetzen. Auf keinen Fall nämlich wird dem Compiler nach der Hälfte der Arbeit langweilig.

Es gibt aber Fälle, in denen diskrete Berechnungen einfacher und effizienter direkt in Assembler geschrieben werden. Einige Systemprogrammieraufgaben verlangen den Gebrauch von Assembler. Einige Hochsprachencompiler übersetzen zuerst in Assemblercode, so dass man, wenn man will, gewisse Stellen von Hand optimieren kann.

Bei vielen Anwendungen für kleinere Geräte, die in großen Mengen hergestellt werden, programmiert man lieber in Assembler um die knappen Resourcen optimal nutzen zu können.


Webreferenz: Crash-Kurs in Assembler