WikiDer > Assemblersprache

Assembleertaal
Ausgabe der Motorola 6800-Assembler. Die Spalten links werden vom Assembler erzeugt, daneben steht der Quellcode

Assemblersprache oder Versammlung ist ein niedriges Niveau Programmiersprache was kaum mehr ist als eine symbolische Darstellung von Maschinensprache ist. Jede Zeile in der Assemblersprache entspricht einer einzelnen Anweisung, obwohl die Übersetzung Monteur bietet immer noch Unterstützung in Form von symbolischen Namen (Labels) für Speicherorte, die für Konstanten oder Variablen verwendet werden, und für Sprungbefehle anstelle von physikalischen Adressen. Verwenden Sie für den Anweisungscode Mnemonik: so ist die anleitung "Belastung Akkumulator" von der mnemonischen LDA angezeigt werden,"Akkumulator speichern" von STA und "add" von ADD. Die einfachste Mnemonik ist NOP, nämlich NeinÖ AUFration - nichts wird getan.

Jeder Prozessortyp hat seinen eigenen Befehlssatz und Registersatz (Programming Model), Beispiele sind der Pic's, der 8051's, der Renesas (ehemals Mitsubishi), der Arm, der Z80, 6502, PowerPC, Motorola 68000 und DEZ Alpha. Es wurde gesetzlich festgelegt, dass der Binärcode zu den geistiges Eigentum gehört dem Chip-Designer. Die Gedächtnisstütze kann von jeder Partei verwendet werden. Renesas verwendet beispielsweise die Mnemonik von Motorola. Zilogs Z80 hat jedoch andere Gedächtnisstützen als die Intel 8080, obwohl es mit diesem Prozessor kompatibel ist.

Ein wichtiger Befehlssatz ist der Befehlssatz für die x86-Familie, weil es in den IBM-kompatiblen PCs zu finden ist (x86 steht für 8086, 186, 286, 386, 486, die Pentium- und der AMD-Familie). Heutzutage verwendet Apple auch Prozessoren aus dieser Familie.

Anleitung

Eine Zeile eines Assemblerprogramms heißt a Anweisung. Es gibt verschiedene Arten von Anweisungen:

  • Maschinenanweisungen übersetzt in vertaald Opcodes mit beliebigen Operanden des endgültigen Maschinencodes.
  • Assembler-Eingabeaufforderungen, Befehle, die der Assembler ausführen muss, wie z. B. das Reservieren von Speicher
  • Makroaufrufe, die eine Textdatei mit Anweisungen öffnen, die dann anstelle der Makroanweisungen eingefügt werden.
  • Kommentar gibt es die Möglichkeit für den Programmierer, seine Absicht wörtlich aufzuschreiben. Dies dient Dokumentationszwecken.

Eine Anweisung in einem Assemblerprogramm besteht im Allgemeinen aus:

  • die Gedächtnisstütze (Name einer Anweisung)
  • ein beliebiger Operand (Argument) für die Anweisung

Manchmal ist der erste Teil der Anweisung oder die Anweisung selbst ein Label, also der symbolische Name eines Speicherplatzes, den der Assembler in eine Zahl für die eigentliche Adresse umwandelt.

Syntax

Es gibt zwar Variationen in der Montageform (insbesondere AT&T oder IntelSyntax) ist diese Notation universell. Die genaue Syntax kann geringfügig abweichen. Zum Beispiel die Assemblersprache von IBM die Teile durch Leerzeichen getrennt. Wenn kein Label vorhanden ist, muss am Anfang ein Leerzeichen (oder eine Reihe aufeinander folgender Leerzeichen) stehen. Bei x86 werden Label und Mnemonik durch einen Doppelpunkt getrennt. Wenn kein Label vorhanden ist, gibt es keinen Doppelpunkt. Bei IBM beginnt der Kommentar wieder nach einem Leerzeichen, während bei x86 dem Kommentar ein a . vorangestellt wird Semikolon.

Die Syntax ist also wie folgt (die farbigen Teile sind optional, wo 'Leerzeichen' geschrieben wird, muss mindestens ein Leerzeichen vorhanden sein):

IBM: Etikette Leerzeichen(e) mnemonische Leerzeichen(e) Argumente Leerzeichen Kommentar (Leerzeichen innerhalb von Argumenten nicht erlaubt)

x86: Etikette: mnemonische Leerzeichen Argumente ;Kommentar (Leerzeichen am Anfang und vor und nach Satzzeichen erlaubt)

Auch die "Richtung" der Operanden kann unterschiedlich sein. Zum Beispiel bedeutet "MOV EAX,EBX" in der Intel-Assembly "Stop the content of registrieren ebx in Register eax", aber in AT&T "den Inhalt von eax in Register ebx eintragen".

Es kommt sogar vor, dass eine einzelne Assemblersprache darin nicht konsistent ist. Die Assemblersprache der IBM 360 listet die Operanden in der Regel in der gleichen Reihenfolge auf wie in der Maschinenanweisung. Die Anweisung L 3,ADRESSE (L of BELASTUNG) stoppt den Inhalt von ADDRESS in Register 3 und der Befehl ST 3,ADDRESS (ST of GESCHÄFT) bewirkt das Gegenteil.

Beispiel:

 MOV cx,10 ;setzen (MOVe) hier den Wert 10 in Register CX: ;label DEC cx ;subtrahieren von Register CX die Zahl 1 (DECrement) JNZ hier ;springen (Jump), wenn cX noch nicht Null (Not Zero) ist auf 'hier' markieren

Das Prozessor wird diese Schleife 10 Mal durchlaufen und dann mit der nächsten Anweisung fortfahren.

Kompatibilität

EIN Monteur übersetzt den Assemblercode in Maschinensprache. EIN Disassembler tut das Gegenteil und übersetzt so die Maschinensprache zurück in die Assemblierung.

Da jeder Befehl in einem Assemblerprogramm eins zu eins mit einem Befehl des Prozessors übereinstimmt, ist ein Assemblerprogramm nicht von einer Prozessorfamilie auf eine andere Familie übertragbar; der Befehlssatz verschiedener Prozessorfamilien ist völlig unterschiedlich und so sind die entsprechenden Assemblersprachen sehr unterschiedlich. Sogenannte „kompatible“ Prozessoren teilen sich (größtenteils) den Befehlssatz.

Beispiele für Prozessorfamilien sind die IntelPentium und verwandte Arten von AMD, die Motorola-Prozessoren in Apple-Computern bis 2005 und die IBM 370-Mainframe-Familie.

Programmierung in der Montage

Der Vorteil der Programmierung in Assembler besteht darin, dass der Code sehr kompakt sein kann. Der Nachteil ist, dass selbst einfache Programme so viel Code benötigen, dass der Programmierer schnell den Überblick verliert. Im Vergleich zur Programmierung in höheren Sprachen wie C und Java, mit dem Anfänger schnell ein einfaches Programm schreiben können, ist das Programmieren in Assembler deutlich schwieriger und nichts für Programmieranfänger. Auch sind in Assembler geschriebene Programme nicht zwischen verschiedenen Prozessoren übertragbar (siehe oben), während Programme in höheren Programmiersprachen zumindest auf Quellcode-Ebene sein können (können).

Die Hauptanwendung von Assembler ist die Programmierung von Embedded Computern, manchmal auch die Optimierung von Code. Bei Compilern und Booten Betriebssysteme Es ist unvermeidlich, dass Teile in Assemblersprache programmiert werden, da höhere Sprachen einfach nicht alles abdecken.

Darüber hinaus sind für Programmierer, die Software „knacken“ wollen, Assemblerkenntnisse unabdingbar. "Cracking" (auf Englisch "Cracking") ist das Ändern des Codes bestehender Software mit einem Disassembler. Die Schutzmaßnahmen gegen die rechtswidrige Nutzung der Software gehen so weit, dass der Erwerber von Nutzungsrechten an der Software teilweise nur durch Cracking diese Rechte ausüben kann. Beispielsweise erlaubt die europäische Gesetzgebung einem Benutzer ausdrücklich, auf diese Weise Fehler aus der Software zu entfernen. Natürlich lassen sich damit auch Sicherheitsmechanismen umgehen, was oft illegal ist.

Siehe auch

Externer Link

  • (und) Intel.com, das Informationen zur x86-Assembly enthält.