Kapitel 3
Mit dem Ausdruck des Assembler-Listings aus Kapitel 2 setzen wir nun die Untersuchung der NPLv111.bin-Datei fort : An Adresse 820122h beginnt es für uns interessant zu werden. An dieser Adresse steht
der Befehl SCALL 82h:1094. Dies bedeutet, daß die Ausführung des Programms an Adresse 821094h fort- gesetzt wird. Dort beginnt ein Unterprogramm, das den LCD-Controller initialisiert. Das Unterprogramm endet mit
dem Befehl SRET und kehrt an die nächste Adresse nach dem SCALL-Befehl im Hauptprogramm zurück. An Adresse 82013Ah wird das Register 2 durch einen MOV-Befehl mit dem Wert 007Eh geladen. Der nächste Befehl lädt
den Wert 0082h (Segment-Wert) ins Register 3. Dies bedeutet, daß R2 und R2 gemeinsam die Adresse des ersten Ausgabetextes (Text-String) enthalten ! Jeder Text-String endet mit dem Wert 00h (siehe im
Textbereich 82007Eh bis 8200E2h) ! Jetzt wird klar, wenn wir uns die Adresse 820158h ansehen, daß dort bereits die Adresse des zweiten Text-Strings steht... Was passiert dazwischen ? Die PUSH-Befehle an den
Adressen 820142h und 820144h übertragen die Werte von R3 und R2 auf den Stack, einen bestimmten Speicherbereich für Register-Werte. An Adresse 820146h wird R2 mit dem Wert 001Eh geladen und anschließend auf den
Stack übertragen. Dieser Wert bedeutet die Ausgabezeile auf der LCD- Anzeige, an der der Text-String erscheinen soll ! An Adresse 82014Ch wird R2 mit einem anderen Wert geladen, der die vorge- sehene Spalte für
den Text-String definiert - pixelgenau ! Schließlich wird an Adresse 82014Eh mit dem Befehl SCALL 82h:1EE0h ein weiteres Unterprogramm aufgerufen, das den Text-String zur LCD-Anzeige sendet !
Die nächsten Text-Zeilen werden nach dem genau gleichen Muster erzeugt.
Experimente :
1. Verändert leicht die Zeilenwerte (1Eh =30dez; 28h =40dez; B0h =50dez) für die Text-Strings mit dem Hexeditor in der Datei NPLv111.bin. Benennt die Datei in Test2.bin um und ladet sie in den DV3.
Wie sehen die Ergebnisse aus ? Welches ist der maximale Wert, der gewählt werden muß, um die letzte Zeile der LCD-Anzeige zu beschreiben ?
2. Verändert in derselben Weise die Spaltenwerte der Text-Strings.
Achtung: Wie wir im Assembler-Listing sehen können, ist der MOV-Befehl für die Definition der Spaltenwerte wie folgt aufgebaut:
C9 23 -> MOV R2, 03h -> C9 = MOV; 2 = R2; 3 = 03h
Welches Problem haben wird deshalb, wenn wir den Spaltenwert ändern wollen ?
3. Benutzt den Disassembler, um die Veränderungen, die ihr mit dem Hexeditor durchgeführt habt, zu überprüfen. In der Tat sollte die veränderte BIN-Datei immer zuerst mit dem Disassembler überprüft
werden bevor sie in den DV3 ge- laden wird, um nervenaufreibende Fehlfunktionen zu vermeiden !
|