Zum Inhalt springen

Maschinensprache i8086/ Filter/ Was ist ein Filter

Aus Wikibooks

Im Beispielprogramm Filter/ 09-SP-V1 haben die Befehle von 100 bis 137 die Aufgabe, die beim Programmaufruf eingegebenen Parameter zu analysieren. Unser Programm muss schließlich wissen, woher es die Daten nehmen soll und wohin das Ergebnis geschrieben werden soll. Aber es gibt eine einfachere Möglichkeit, wenn man die Besonderheiten vom DOS-Kern des Betriebssystems kennt.

Für die Befehle auf der Kommandozeile gibt es sogenannte Umleitungen: Die Eingabe- und Ausgabeumleitung sowie die Befehlsverkettung, genannt Pipeline.

  • „Eingabeumleitung“ bedeutet: Ein Programm, welches eigentlich eine Eingabe von der Tastatur (Standardeingabegerät) erwartet, bekommt anstelle der Tastatureingabe eine vorbereitete Textdatei „eingeschoben“. Das Programm selbst hat keine Möglichkeit herauszufinden, ob es eine vorbereitete Textdatei oder manuelle Tastatureingaben empfängt. Die Eingabeumleitung wird mit dem „Kleiner-Zeichen <“ angewiesen.
  • „Ausgabeumleitung“ bedeutet: Die Ausgabe eines Programmes, welches normalerweise einen Text auf den Bildschirm ausgibt (Standardausgabegerät), wird in eine Textdatei „umgeleitet“. Auf dem Bildschirm erscheint nichts. Die Ausgabeumleitung wird mit dem „Größer-Zeichen >“ angewiesen.
  • „Befehlsverkettung“ bedeutet: Die Ausgabe eines Programmes, welches normalerweise einen Text auf den Bildschirm ausgibt, wird als Texteingabe an ein nachfolgendes Programm „weitergeleitet. Auf dem Bildschirm erscheint nichts. Die Befehlsverkettung wird mit dem senkrechten Strich „|“ angewiesen.

Ein Programm, welches eine Zeichenfolge von der Standardeingabe entgegennimmt und sie verändert an die Standardausgabe weitergibt, nennt man „Filter“. Jede DOS- und Windows-Version bringt drei Filter mit:

  • SORT ordnet Textzeilen in einer bestimmten Reihenfolge (alphabetisch),
  • FIND filtert Zeilen aus dem Eingabestrom heraus und lässt nur einen Teil der Zeilen zur Standardausgabe durchkommen,
  • MORE lässt jeweils 24 Zeilen zur Standardausgabe durch und stoppt dann, bis der Benutzer den Text gelesen hat. Wenn er eine Taste drückt, werden die nächsten 24 Zeilen angezeigt.

Ein paar Beispiele, falls das neu für Sie ist: Öffnen Sie die Eingabeaufforderung, tippen Sie die nachfolgend aufgelisteten Befehlsfolgen ein. Ich erspare mir jeden Kommentar, schauen Sie einfach, was passiert!

dir
dir | find "(en)"
dir | sort
dir | sort /r
dir | find "1"
dir | find "<DIR>"
dir | find /v "<DIR>"
dir | find "<DIR>" | sort

Beachten Sie bitte: Kommandozeilenbefehle kann man beliebig mit Groß- oder Kleinbuchstaben schreiben. Ausnahme: Bei in Anführungszeichen eingeschlossenen Zeichenfolgen muss die Groß/Kleinschreibung beachtet werden. Wenn Sie mehr über diese Befehle wissen wollen, tippen Sie den Befehlsnamen ein, gefolgt von Leerzeichen, Schrägstrich und Fragezeichen.

Wir werden Filter programmieren, welche einen Quelltext in mehreren Schritte verwandeln, so dass er leichter zu wikifizieren ist.

Das praktische am Filterkonzept ist, dass man dem Programm keine Dateinamen übergeben muss und auch nicht die Handles bestimmen muss. Diese Nebenarbeiten erledigt das Betriebssystem. Die Standardeingabe hat die Handle-Nummer 0, die Standardausgabe die Nummer 1. Wir könnten unser Beispielprogramm folgendermaßen verändern:

0100   MOV AX,0   ; Handle der Standardeingabe
0103   JMP 0138   ; weiter ab Adresse 138, der Programmteil von 105 bis 137 wird nicht mehr benutzt.

Der Abschnitt "Speicherbereich ab 8000 in Datei schreiben" kann ebenfalls vereinfacht werden. Im nächsten Kapitel sehen Sie das verkürzte Programm „Filter/ 09-SP-V2“.