| |
|
ELEKTRONIK |
|
|
|
|
|
Assembler-Befehlsaufbau
Der Assembler ist ein Programm zur Übersetzung mnemotechnischer Befehlsbezeichnungen
in die Maschinensprache. Es erfolgt 1:1-Abbildung der Befehle in die Maschinensprache, d. h. eine Assemblerzeile entspricht einem Befehl. Maschinensprache: - OP-Code im Maschinencode (binär bzw. sedezimale Abkürzung)
- Adresse als Maschinenadresse (binär bzw. sedezimale Abkürzung)
Assemblersprache: - Festlegung symbolischer Bezeichnungen, die vom Assembler-Programm erkannt undverarbeitet werden.
- OP-Code: mnemonische Bezeichnung (Mnemonics)
- Adresse: symbolische Bezeichnung (Name, Marke (Label))
Allgemeiner Aufbau eines Assemblerbefehls:
Marke | OP-Code | Operand/Adresse | Kommentar |
Beispiel: STARTLDAA DAT1; Zähler initialisieren
- Op-Code muß immer vorhanden sein
- Operand/Adresse, falls der Befehl es verlangt
- Marke und Kommentar sind optional
- Trennzeichen zwischen den einzelnen Feldern: Leerzeichen
- Marken-Feld: (optional)
-
Das Feld beginnt in Spalte 1 (also ganz vorne). Die Marke besteht aus Buchstaben,
Ziffern und Sonderzeichen (".", "_", "@") und beginnt mit einem Buchstaben.
Die Länge ist auf 31 Zeichen begrenzt. Die Marke kann durch einen ":"
abgeschlossen werden, dieser wird vom Assembler ignoriert. Es wird zwischen
Groß- und Kleinschreibung unterschieden. Registernamen (A, B, C, D, X, Y, S)
sind reserviert und dürfen nicht verwendet werden.
Marken bezeichnen Konstante oder Speicheradressen.
- OP-Code-Feld: (muß vorhanden sein)
-
Falls keine Marke vorhanden, muß wenigstens 1 Leerzeichen davor stehen.
Sinvoller ist es jedoch die Opcodes in einer Spalte untereindander zu schreiben.
Die Befehle werden durch Mnemonics aus zwei bis vier Buchstaben dargestellt.
Bei einigen Befehlen ist eine Registerangabe direkt an das Mnemonic anzuhängen
(z. B. ADDA, ADDB, ADDD). In diesem Feld kann auch eine Assembler-Direktive
(Pseudobefehl) stehen Anweisung
für den Assembler, Genaueres später.
- Operanden/Adreß-Feld: (abhängig vom OP-Code)
-
Dieses Feld enthält den Operanden des Befehls, meist eine Adresse oder
eine Konstante. Aufbau hängt von der Adressierungsart ab (später mehr dazu).
Falls eine Adressierungsart mehrere Operanden verlangt (z. B. Register + Offset)
erfolgt Trennung der Operanden mit Komma.
Bei vielen Assemblern sind arithmetische und logische Ausdrücke aus Konstanten
möglich. Die Adreßangabe (Offset) kann erfolgen als:
- Bezeichner, z. B. MAXIMUM
- Dezimalzahl (ohne Kennzeichnung), z. B. 72
- Sedezimalzahl (Vorsatz $), z. B. $48
- Dualzahl (Vorsatz %), z. B. %01001000
- ASCII-Zeichen(-folge), z. B. 'Hallo' oder "Hallo"
- als Offset vom "Location Counter" (Vorsatz *), z. B. *+5
Im Operandenfeld kann auch mit den vier Grundrechenarten (+ - * /) und Klammern
gearbeitet werden. Beachten Sie, daß die Ausdrücke zur Assemblierungszeit
ausgewertet werden - nicht zur Laufzeit des Programms!
- Kommentar-Feld: (optional)
-
Das Kommentarfeld wird durch den Strichpunkt oder zwei Schrägstriche eingeleitet.
Es enthält beliebige Zeichenfolgen und wird vom Assembler ignoriert.
Zusätzlich sind auch reine Kommentarzeilen möglich, die mit einem "*"
in Spalte 1 beginnen.
Der Assembler hat zwei Durchläufe:
- Durchlauf (pass one): Syntaxprüfung und Aufbau des Adreßbuchs.
- Durchlauf (pass two): Vollständigkeitsprüfung und Aufbau des Zielprogramms.
Beispiel:
1. Quellcode
Adresse |
Inhalt |
Marke |
Befehl |
Operand |
Kommentar |
|
|
|
ORG |
$8000 |
In den Speicher ab $8000 |
|
|
MAIN |
BRA |
MARKE |
relativer Vorwärtssprung |
|
|
|
JMP |
MARKE |
absoluter Vorwärtssprung |
|
|
|
BRA |
MAIN |
relativer Rückwärtssprung |
|
|
MARKE |
JMP |
MAIN |
absoluter Rückwärtssprung |
|
|
|
END |
|
|
2. Erster Assemblerlauf: Adresspegel und Code eintragen
Adresse |
Inhalt |
Marke |
Befehl |
Operand |
Kommentar |
|
|
|
ORG |
$8000 |
In den Speicher ab $8000 |
8000 |
20 ?? |
MAIN |
BRA |
MARKE |
relativer Vorwärtssprung |
8002 |
7E ?? ?? |
|
JMP |
MARKE |
absoluter Vorwärtssprung |
8005 |
20 ?? |
|
BRA |
MAIN |
relativer Rückwärtssprung |
8007 |
7E ?? ?? |
MARKE |
JMP |
MAIN |
absoluter Rückwärtssprung |
|
|
|
END |
|
|
3. Zweiter Assemblerlauf: Adressen absättigen
Adresse |
Inhalt |
Marke |
Befehl |
Operand |
Kommentar |
|
|
|
ORG |
$8000 |
In den Speicher ab $8000 |
8000 |
20 05 |
MAIN |
BRA |
MARKE |
relativer Vorwärtssprung |
8002 |
7E 80 07 |
|
JMP |
MARKE |
absoluter Vorwärtssprung |
8005 |
20 F9 |
|
BRA |
MAIN |
relativer Rückwärtssprung |
8007 |
7E 80 00 |
MARKE |
JMP |
MAIN |
absoluter Rückwärtssprung |
|
|
|
END |
|
|
|
|
|
|
|
|