Seite(n) für Einsteiger
Sprünge
Heute darf gesprungen werden, von einem Byte zum nächsten oder wohin
auch immer. Bewegung soll anregen, also lassen wir die Speicherzellen
rauchen. Die "Intelligenz" eines Rechners wird bekanntlich
durch zwei Dinge ermöglicht: 1. Er kann sehr schnell fehlerfrei etwas
immer wieder tun und 2. kann er einfache Entscheidungen treffen.
Allerdings muß er dabei immer wissen, wo's lang geht.
Die Sprünge, die der Z80 Prozessor kennt, lassen sich nach mehreren
Gesichtspunkten einteilen, nämlich nach der Art der Bedingung und der
Form, wie die Bedingung beschrieben wird.
Der einfachste Sprung ist derjenige ohne Bedingung. Wenn z.B. der
Zielort die Hausnummer 4C3F hat, sieht bei einer direkten Adressierung
der entsprechende Befehlscode so aus: C3 3F 4C . C3 kennzeichnet die
Sprungart, die beiden Bytes der Adresse folgen in umgekehrter
Reihenfolge. Soll der Zielort erst innerhalb eines Programmablaufs
errechnet werden, legt man das Ergebnis im HL- oder eines der
Indexregisterpaare ab. Geben Sie hier unter NAS-SYS einmal folgendes
komplexe Programm ein:
0D00 DF 63 lese eine Zeile ein
0D02 DF 64 wandle sie in einen
Binaerwert um, speichere Er-
gebnis ab 0C21
0D04 2A 21 0C Lade diese Adresse in das
HL Register
0D07 E9 arbeite ab der Stelle weiter,
auf die der Inhalt von 0C21
und 0C22 zeigt.
Nach dem Start ED00 wird jetzt eine Adresseingabe erwartet. Das
Programm springt dann dorthin und arbeitet dann von dieser Stelle
weiter. Probieren Sie folgende Werte: 0051, 02EB, 0450.
Die relative Adressierung hat zwei Vorteile: 1. Programme lassen sich
ohne Probleme im Arbeitsspeicher verschieben und 2. besteht der OP-Code
nur noch aus 2 Bytes. Leider aber muß man, wenn keinen Assembler zur
Verfügung hat, doch etwas umständlich die Sprungweite berechnen. Das 2.
Byte gibt die Sprungweite bezogen auf den aktuellen Stand des
Programmzählers (PC) an. Soll der Sprung rückwärts erfolgen, wird das
8. Bit gesetzt und die restlichen sieben werden in ihrem Wert rückwärts
gesetzt (2-Komplement).
Beispiele:
0D00 18 04 JR LABEL
0D02 26 02 LD H,2
0D06 00 LABEL NOP
Die erste Programmzeile wird in den Prozessor eingelesen und der PC um
die entsprechende Zahl an Bytes erhöht. Um jetzt zum Label zu gelangen,
müssen 4 Bytes übersprungen werden. Deshalb muß das 2. Byte in der 1.
Zeile 04 sein. Das 1. Byte steht für einen relativen Sprung.
| |
0D00 06 04 LABEL LD B,4
0D02 0E 07 LD C,7
0D06 18 FA JR LABEL
Um zum LABEL zu gelangen, müssen ab der 3. Zeile insgesamt 6 Bytes
üebersprungen werden. Will man bei einem Programm mit relativen
Sprüngen später noch etwas einfügen, müssen die Sprungweiten natürlich
neu berechnet werden. Relative Sprünge können vorwärts maximal 129
Bytes, rückwärts 126 Bytes weit reichen. Mit dem folgenden Programm
darf man mit ED00 ein Gefühl für die Weite erhalten!

Wolfgang Mayer-Gürr
Hinweis zum Programm SEESCHLACHT von K. Mombaur
(Heft 1-82):
H.Auge hat entdeckt, daß das Programm nicht wegen NASSYS3 auf manchen
Systemen nicht läuft, sondern wegen der obskuren zweiten BASIC-Version.
Entgegen der
Hinweise
der Redaktion ist das Programm so einfacher anzupassen:
Durch DOKE 4175,-6670 wird der Zeilenvorschub unterdrückt und die
Eingabe an der erwarteten Stelle gemacht ( Manual Seite 25). Durch DOKE
4175,-25 kann wieder auf die normale Betriebsart umgeschaltet werden
(im Spiel nicht nötig).
Mehrere Leser hatten Schwierigkeiten mit der Grafikerweiterung aus
Heft 1-82.
Peter Deege aus Aachen schreibt dazu:
Ich habe mir diese einfache
Grafikerweiterung nachgebaut, aber leider funktionierte sie nicht. Nach
Durchdenken des Schaltbilds stellte ich fest, daß die Freigabe der
Schieberegister genau umgekehrt erfolgte. Nach den Änderungen IC 15 Pin
7 nach Pin 13 (LS 00) und IC 265 Pin 7 nach Pin 4 (LS 00) tat sich
schon 'was, aber noch unsaubere Character und Doppeldarstellungen. Ich
tauschte das LS 74 mit einem Standard 74, und die Karte lief
einwandfrei.
|
|