Assembler-Kurs Teil 1 -----------------------
EINLEITUNG: Dieser Assembler-Kurs soll allen BASIC- Programmierern den Einstieg in Assembler ermöglichen. Ich werde mich in der Folge darum be- mühen, die komplizierten Fachbegriffe zu umgehen und leicht verständliche Erklär- ungen zu geben. Zunächst sollen innerhalb dieses Kurses alle Assembler-Befehle behandelt werden. In späteren Teilen wird dann auf die Verwendung von Kernal-Routinen und die Interrupt-Technik eingegangen. Zu jedem Teil des Kurses befindet sich ein Programm auf der zweiten Seite der Diskette ("ASSEMBLER-KURS 1"), das einige Assembler-Routinen enthält und Ihnen deshalb gleich die Auswirkungen der jeweiligen Assembler-Befehle demon- strieren kann. DAS WERKZEUG: Zum Programmieren in Assembler benötigen Sie unbedingt ein Programm, das die Be- fehle in reine Maschinensprache umwan- delt. Diese Programme werden Assembler oder Monitore genannt. Ein solches Pro- gramm finden Sie unter anderem auf der Rückseite dieser Ausgabe (WIZ-MON); die Beschreibung dazu entnehmen Sie der entsprechenden Rubrik.
LDA, STA und BRK: ----------------
Und jetzt können wir schon mit den ersten Befehlen loslegen. Wir fangen an mit LDA (load accumulator) Der Akkumulator (oder kurz Akku genannt) ist eine Art Verteilerstelle. Mit diesem Befehl lädt man also einen Wert (Zahl) in den Akku. STA (store accumulator) schreibt diesen Akkuinhalt dann in die angegebene Speicherstelle. Der Befehl BRK entspricht etwa dem BASIC-Befehl STOP und sollte zunächst immer am Ende Ihrer ersten Programmier- veruche mit Assembler stehen. LDA und STA sind durchaus mit PEEK und POKE aus dem BASIC vergleichbar.
Beispiel: POKE 8192,8
Dieser Befehl schreibt also den Wert 8 in die Speicherstelle 8192. Eine Routine in Assembler, die die gleiche Aufgabe erfüllt, lautet:
LDA #$08 STA $2000 BRK
Lassen Sie sich nicht dadurch verwirren, daß hier Hexadezimalzahlen (Erklärung im Programm!) verwendet werden. Das Zeichen "#" in der ersten Zeile zeigt an, daß eine konstante Zahl und nicht der Inhalt einer Speicherzelle in den Akku geladen wird. Die hexadezimale Zahl $2000 entspricht haargenau der dezimalen Zahl 8192. Zunächst wird also die Zahl 8 (bzw. $08) in den Akku geladen. In der zweiten Zeile wird dieser Wert in der Adresse 8192 ($2000) abgelegt. Ein anderes Beispiel: Nach der Eingabe von POKE 12288, PEEK (8192) hätte die Adresse 12288 ebenfalls den Inhalt 8.
Die entsprechenden Assembler-Befehle lauten: LDA $2000 STA $3000 BRK
Mit LDA wird diesmal keine Zahl, sondern der Inhalt der Speicherstelle $2000 (ähnlich PEEK(8192) in den Akku geladen. STA legt den Akkuinhalt daraufhin bei $3000 (dezimal 12288) ab.
DER UMGANG MIT DEM MONITOR:
Eingegeben werden die Assembler-Befehle mit einem Monitor durch: A Speicherstelle Assembler-Befehl z.B.: A C000 LDA #$08 Wenn Sie Ihre eingegebenen Befehlsfolgen noch einmal betrachten wollen, so können Sie dies mit "D Speicherstelle" (z.B.: D C000) tun. Es wird Ihnen dann bei unserem Beispiel folgende Zeile gezeigt: . C000 A9 08 LDA #$08 Die Zahl C000 ist die Speicherstelle, in der der Befehl steht. A9 ist die Codezhl für den LDA-Befehl. Die darauffolgende Zahl zeigt den Wert an, der in den Akku geladen wird. Uns brauchen zunächst nur die Assembler-Befehle im Klartext zu interessieren. Laden Sie nun das Beispielprogramm "ASSEMBLER-KURS 1" von der zweiten Seite. Es wird Ihnen weitere Hilfen zu den ersten Assembler-Befehlen und zum hexadezimalen Zahlensystem geben. In der nächsten Ausgabe behanden wir die Indexregister und die dazugehörigen Assmblerbefehle. Bis dahin wünschen ich Ihnen viel Spaß beim ausprobieren der gelernten Befehle!
(rt)