Maschinensprache i8086/ Filter/ 09-II
Übersicht
[Bearbeiten]Dieses Programm ist ein Filter. Eine von der Standardeingabe kommende Zeichenfolge wird an die Standardausgabe ausgegeben. Dabei werden alle in der Datei vorkommenden Tabulatoren durch || ersetzt (zwei senkrechte Striche, wie sie in Wiki-Tabellen verwendet werden). Vermutlich ist es sinnvoll, vorher mit dem Programm 09-I-I eventuell vorhandene Tabulatoren am Zeilenanfang zu ersetzen.
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 erfolgt Ausgabe auf Bildschirm:
type quelle.txt | 09-ii 09-ii <quelle.txt
- Im praktischen Einsatz können ebenfalls beide Varianten verwendet werden:
type quelle.txt | 09-ii >ziel.txt 09-ii <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 alle vorgefundenen Tabulatoren (ASCII-Zeichen = 09) in zwei senkrechte Striche (ASCII-Code=124d = FCh) umgewandelt werden.
- Der umgewandelte Text wird an die Standardausgabe ausgegeben.
Quelldatei einlesen
[Bearbeiten]Um diesen Abschnitt zu verstehen, sollten Sie vorher Arbeit mit Dateien (Handle) gelesen 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.
- 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“. Fertig ist die Eingabe!
- Geben Sie den Befehl "u 100" zur Kontrolle ein (aber eigentlich ist die Kontrolle überflüssig).
|
|
|
Speichern vor dem Testen nicht vergessen! Das geht mit den folgenden drei Befehlen
-n 09-ii.com |
-r cx |
: 6a |
-w |
Probieren Sie das Programm mit dem folgenden Befehl aus
09-ii <quelle.txt
Der umgewandelte Text erscheint auf dem Bildschirm. Mit
09-ii <quelle.txt >ziel.txt
wird der umgewandelte Text in die Datei ziel.txt geschrieben.
Programmtest mit schrittweiser Abarbeitung
[Bearbeiten]Ein Test mit schrittweiser Abarbeitung ist leider völlig unmöglich. Wieso?
Wenn es möglich wäre, müsste der Befehl zum Testen des Filters so aussehen:
debug 09-ii.com <quelle.txt
Das Problem: Das Programm DEBUG nimmt die Inputdatei entgegen, als ob es sich um Quelltext handeln würde. Die Datei gelangt nicht bis zu dem zu testenden Programm. 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 Tests also nicht möglich. 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 wird eine Datei „ziel.txt“ erzeugt, die man analysieren könnte).
Die hier blau markierte Befehlsfolge ist getestet, Sie können diese problemlos zur Erstellung eines Filterprogrammes benutzen.