Maschinensprache i8086/ Filter/ 09-I-I
Übersicht
[Bearbeiten]Der gewählte Programmname soll zum Ausdruck bringen, dass am Zeilenanfang befindliche Tabulatoren (ASCII-Code 09) durch die Zeichenfolge "senkrechter Strich, Minuszeichen, neue Zeile, senkrechter Strich" ersetzt wird.
Das nachfolgende Programm kann auf folgende Weise verwendet werden:
- Das Programm erwartet die Dateneingabe von Tastatur und gibt sie auf den Bildschirm aus. Es ist daher nur eine Verwendung als Filter sinnvoll. Das kann mit einem der folgenden Befehle erreicht werden:
- In der Testphase ist es ratsam, dass die Ausgabe auf Bildschirm erfolgt:
type quelle.txt | 09-i-i 09-i-i <quelle.txt
- Im praktischen Einsatz gibt es ebenfalls zwei gleichwertige Varianten:
type quelle.txt | 09-i-i >ziel.txt 09-i-i <quelle.txt >ziel.txt
Der interne Programmablauf ist folgender:
- Die Standardeingabe wird in den Speicherbereich ab 1000 eingelesen.
- Die eingelesenen Daten werden in den Speicherbereich der Zieldatei (ab 8000) umkopiert, wobei Tabulatoren (ASCII-Zeichen = 09) am Zeilenanfang ersetzt werden durch
- einen senkrechten Strich (ASCII-Code=124d = FCh)
- ein Minuszeichen
- Zeilenvorschub (bestehend aus den beiden Zeichen 0d und 0a)
- einen weiteren senkrechten Strich
Tabulatoren, die nicht am Zeilenanfang stehen, bleiben unverändert (Diese Tabulatoren können anschließend mit dem Programm 09-II weiter umgewandelt werden).
- Der derart umgewandelte Text wird an die Standardausgabe geschrieben.
Quelldatei einlesen
[Bearbeiten]Um diesen Abschnitt zu verstehen, sollten Sie sich vorher in Arbeit mit Dateien über Handles informiert haben. Das Einlesen erfolgt von Handle = 0 (Standardeingabe).
Datei durchsuchen und von 1000 nach 8000 kopieren
[Bearbeiten]In diesem Programmabschnitt wird der ab Adresse 1000 eingelesene Text Byte für Byte analysiert und in den Speicherbereich ab 8000 umkopiert, wobei Tabulatoren sonderbehandelt werden. Im wesentlichen sind es dieselben Befehle wie im Kapitel 09-SP-V2.
Datei schreiben
[Bearbeiten]Handle = 1 wird für die Standardausgabe verwendet.
Programm erzeugen und ausprobieren
[Bearbeiten]- Tippen Sie "debug ein und drücken Sie Enter
- Tippen Sie jetzt den Befehl "a 100" ein und Enter. Der Debugger erwartet jetzt, dass Sie die Befehle eintippen (die blaue Spalte). Mit einem Trick können Sie sich die mühsame, fehlerträchtige Tipperei sparen.
- Markieren Sie in der Tabelle den gesamten blauen Text, nicht mehr und nicht weniger.
- Kopieren Sie die markierten Befehle in die Zwischenablage (Ctrl-C)
- Wechseln Sie in das DOS-Fenster, wo der Debugger auf die Befehlseingabe wartet. Der Cursor blinkt hinter dem Minuszeichen-Prompt.
- Klicken Sie mit der rechten Taste in die blaue Titelleiste (in der Eingabeaufforderung - debug steht).
- Rollen Sie im aufklappenden Menü auf „Bearbeiten“ und klicken Sie auf „Einfügen“. Drücken Sie zum Abschluss noch ein- oder zweimal Enter, um die Befehlseingabe abzuschließen. Fertig!
|
|
|
Mit dem Befehl "u" können Sie das Programm kontrollieren. Weil es nicht auf eine Bildschirmseite passt, brauchen Sie drei Befehle dafür:
u 100 u 120 14e u 150 16a
Speichern vor dem Testen nicht vergessen! Das geht mit den folgenden drei Befehlen
-n 09-i-i.com |
-r cx |
: 6a |
-w |
Wenn Sie gern ein Programmlisting hätten, können Sie die Ausgabeumleitung nutzen. Tippen Sie ein:
debug 09-i-i.com >09-i-i.txt
und tippen Sie „blind“ die beiden Befehle „u 100 16a“ und „q“ ein.
Probieren Sie das Programm mit dem folgenden Befehl aus
09-i-i <quelle.txt
Der umgewandelte Text erscheint auf dem Bildschirm. Wenn das Ergebnis richtig zu sein scheint, können Sie mit
09-i-i <quelle.txt >ziel.txt
den umgewandelten Text in die Datei ziel.txt schreiben und in Ruhe untersuchen.
Programmtest mit schrittweiser Abarbeitung
[Bearbeiten]Ein Test mit schrittweiser Abarbeitung ist leider völlig unmöglich. Wieso?
debug 09-i-i.com <quelle.txt
würde der Befehl zum Testen lauten. Das Problem: Die Quelldatei wird nicht wie erwartet an das zu testende Programm geleitet, sondern wird vom Programm DEBUG entgegengenommen. DEBUG erwartet allerdings Befehle und nicht irgendeinen Text. Im Ergebnis produziert DEBUG eine gewaltige Menge an Fehlermeldungen und hängt sich zum Schluss auf (außer Ihr Text endet mit "Neue Zeile, Buchstabe Q, Neue Zeile".
Wenn Ihr Programm die Standardeingabe einliest, sind also Tests nicht drin. Es bleibt Ihnen also nur eins übrig: Schreiben Sie auf Anhieb fehlerfreie Programme! Wenn in Ihrem Programm ein Fehler sein sollte, können Sie ihn nur durch Analyse der Datei „ziel.txt“ und scharfes Nachdenken finden, vorausgesetzt, es entsteht überhaupt eine Datei „ziel.txt“.
Die hier blau markierte Befehlsfolge ist noch nicht ausreichend getestet.