Seite(n) für Einsteiger
von Günter Böhm
Hier also der versprochene Beitrag über die Ladebefehle. (Wir wollten
ja streng nach dem Z80 Manual vorgehen, aber Günter Kreidl hat mit der
BCD-Serie etwas vorgegriffen). Zunächst ein Tip zur Arbeit im
Assembler. Obwohl ich den ZEAP 2.0 besitze (und vorher mit ASM
Assembler gearbeitet habe), skizziere ich Programme immer zunächst auf
dem Papier. Man überblickt dann größere Progammteile schneller und hat
nicht nur 15 Bildschirmzeilen vor sich. Das Umschreiben der
mnemonischen Assemblerbefehle in den Object-Code lasse ich allerdings
den Rechner machen (obwohl mir das Assemblieren per Hand nichts
geschadet hat, Im Gegenteil: nach häufigem Aufsuchen des Object-Codes
in den Tabellen gewinnt man einen Blick für das Lesen von Hexdumps, so
daß man z.B. schnell zwischen Befehlen, ASCII-Strings und Tabellen
unterscheiden kann). Nun aber zur Praxis!
Ein Programm besteht
eigentlich nur aus Daten, die zwischen verschiedenen Registern des
Prozessors ausgetauscht, manipuliert, in verschiedenen Speichern
abgelegt oder durch Ports ausgegeben werden. So ist das Laden von
Registern und Speichern einer der wichtigsten Aufgaben eines Programms.
Betrachten wir uns die Matrix der 8 Bit-Ladebefehle. (In meinem MOSTEK
Manual auf Seite 29). Ich habe sie allerdings wie alle anderen Tabellen
fotokopiert und in Klarsichthüllen aufbewahrt, so daß ich immer die
möglichen Befehle vor mir habe). In der linken Spalte stehen die
Zielregister (Destination), die geladen werden sollen; in den Zeilen
stehen die Quellregister (Source), aus denen geladen wird. Nun muß man
nur noch wissen, daß ein Register ohne Klammer direkt geladen wird, ein
Register mit Klammer aber auf die Adresse hinweist, die geladen werden
soll. (Keine Angst, dies wird am Beispiel verdeutlicht).
Soll Register
A mit dem Wert von Register B geladen werden (im Assembler heißt das LD
A, B), so suche ich in der Tabelle A als Ziel und B als Quelle. An der
Schnittstelle findet man den Code für den Rechner 78. Ich kann aber
auch A direkt mit einer Zahl n laden, (n steht ganz oben rechts). Dann
heißt der Befehl im Maschinencode 3E n.
| |
Probieren wir das einmal praktisch aus. Mit dem MODIFY Befehl M C80
ENTER nehmen wir uns die Adresse 0C80 vor. Der Rechner zeigt nun auf
dem Bildschirm, welchen Inhalt diese Adresse hat. Wir geben ihr nun den
Inhalt 06, in dem wir diese Hexzahl und anschließend ENTER eintippen,
Nun wird auf dem Schirm die nächste Adresse angezeigt. Die belegen wir
mit z.B, FF + ENTER. Damit haben wir den Beginn unseres Programmes
bereits festgelegt. 06 FF bedeutet LD B,FF hex (Ziel B wird mit Zahl n
= FF geladen). Unser nächster Befehl ist 78 (Sie erinnern sich: LD
A,B). Damit wir unser Programm auch testen können, geben wir zuletzt E7
ein, Dieser Befehl bewirkt einen Sprung in das Betriebssystem und zeigt
alle Register an. Wir schließen das Laden des Programmes mit Punkt und
ENTER ab. Wenn das Programm nun mit E C80 (execute = ausführen)
gestartet wird, zeigt es augenblicklich die Register auf dem Bildschirm
an.

Register A und B enthalten beide FF; denn unser Programm lautete
LD B,FF
LD A,B
RST 20H (Restart 20Hex = E7 = Breakpoint)
Sie können obiges Programm
auch mit den anderen Registern durchspielen. Die Registeranzeige gibt
Ihnen jeweils das Ergebnis an, Mit dem S Befehl (Single Step =
Einzelschritt) können Sie auch jede Programmzeile einzeln verfolgen.
Achten Sie bei folgendem Programm darauf, wie sich die einzelnen
Register verändern, und suchen Sie die Befehle in der Tabelle auf.
|