Assembler-Beispiel 6 |
Die Aufgabe ist, eine Taste auf der Tastatur zu betätigen und die Bitfolge
des Wertes auszugeben!
Nach Ausgabe der Bitfolge soll das Programm erneut durchlaufen werden.
Die Darstellung soll wie bei unserem 4Bit-Prozessor "ERNA" im Beispiel vom
Simulator
durch farbige "Balken" erfolgen (1 - rot; 0 - keine Darstellung). Die Bits sollen
in einem entsprechenden Rahmen auf dem Bildschirm an genau einer festgelegten Stelle
ausgegeben werden. |
Das soll uns im Moment nicht weiter interessieren, wir wollen zunächst einen Algorithmus aufstellen, der in dem ASCII-Zeichen die 1 und 0 findet?
Mit der DOS-Funktion 8 wartet das System auf eine Eingabe und legt das Ergebnis
als Bitfolge ins AL-Register. Diese Bitfolge entspricht dem ASCII-Code des Zeichens.
Nun muss Bit für Bit ermittelt werden, ob eine 1 oder 0 auf den Plätzen steht.
Im
Beispiel
unter "ERNA" wurde ein ähnliches Problem behandelt. Wir wollen auch hier nach diesem
Schema verfahren.
Es wird eine Maske definiert, das ist eine Bitfolge, in diesem Fall 8 Bit, die an
genau einer Stelle eine 1 und an allen anderen eine 0 hat. Unter Anwendung der
logischen AND-Funktion von Bitfolge und Maske kann nun genau auf diese Stelle
bezogen eine Aussage getroffen werden. Denn steht an dieser Stelle in der Bitfolge
eine 0 wird nun, da alle anderen Bitoperationen auch 0 sind, das Zero-Flag gesetzt
und das kann man auswerten. Im Folgenden noch einmal das Schema:
Der gesamte schematische Ablauf.
Nach der Eingabe wird der Wert zunächst einmal gerettet, denn durch die logische
Operation wird der Wert eventuell verändert. Danach definieren wir die Maske für
Bit7 (linkste Bit) und legen mit 8 in einem Speicher die Anzahl der Durchläufe fest. |
So soll das auf dem Bildschirm dargestellt werden!
Links soll zuerst der eingelesene Wert (Taste) wieder ausgegeben werden, dann folgen
die Zeichen: Leerzeichen, =, > und Leerzeichen. Dann soll die Darstellung
der Bitfolge als Textblöcke erfolgen. |
Û(219) (032) ³(179) Ä(196) ¿(191) Ú(218) Ù(217) À(192) Â(194) Á(193) |
Das Bild zeigt eine mögliche Realisierung der Aufgabe. Wir brauchen 3 Textzeilen,
wobei sich bei Darstellung einer anderen Bitfolge nur die mittlere Zeile ändert. Ein DOS-Bildschirm hat 80 Spalten und 25 Zeilen, wobei die Zählung jeweils mit 0 beginnt, aber die erste Zeile (Zeile 0) ist die oberste auf dem Bildschirm. Das Textzeichen oben links hat somit die Position 0,0. Wenn also die drei Zeilen immer an der gleichen Stelle auf dem Bildschirm erscheinen sollen, werden wir auch Positionierungen des Ausgabe vornehmen müssen! |
Das ist das ganze Programm!?
Das kann es ja wohl nicht sein? Aber bei genauerem Hinsehen stellt man fest, dass
da wohl mit Zu beachten ist, dass das Macro mit Parametern eingesetzt wird: wert wurde eingelesen und wird im Macro verarbeitet, die Zahlen 5 und 10 sind die Position der Darstellung auf dem Bildschirm (Zeile 5, Spalte 10). Das Macro soll nun auch mit anderen Werten arbeiten können, also andere Position! |
Mit diesem
Byte wird sowohl die Farbe des Textzeichens als auch des Hintergrundes festgelegt. Die Bezeichnung der Bits soll in üblicher Weise erfolgen, ganz recht - Bit 0, ganz links - Bit 7. Bit 0, 1, 2 und 4, 5, 6 haben die gleiche Funktion für die Farbe, die oberen 3 jedoch für den Hintergrund, die unteren für das Zeichen. Die 3 Bit habe in gleicher Weise wie heute die Funktion fürs RGB-Signal (rot, grün, blau).Wenn also die reine Farbe blau festgelegt werden soll, muss die Bitfolge 001 ausgegeben werden. Zu Anfangszeiten der Farbe gab es 1Bit, heute werden dort 8Bit pro Farbe verwendet, damit gibt es für eine Farbe 255 Variationen (0 - Farbe ist nicht da). Das Bit 3 gibt die Möglichkeit die Intensität der Farbe zu erhöhen (1 - höher). Damit kann man nun mit 16 Farben pro Zeichen operieren. Das Bit 7 wurde unterschiedlich interpretiert, üblicher Weise kann man das Blinken des Zeichens damit bewirken. Wenn man nach einem Absturz des Systems lauter blinkende Zeichen auf dem Bildschirm übrig behält, hat man offensichlich unsinnige Zeichen in den Textbildschirm gespeichert! Als Beispiel sollen einmal die Farbmöglichkeiten für die Textzeichen dargestellt werden (oben Bit3 = 0; unten Bit3 = 1 intensiv):
Etwas sollte nun aber auch bemerkt werden, der Bildschirm braucht nun 4KByte (2K für das Zeichen, 2K für die Attribute) |
In der folgenden Tabelle sollen noch einmal alle Kombinationen von Hintergrund- und Zeichenfarbe dargestellt werden:
Zeichen Farbe: | schwarz 0000 | blau 0001 | grün 0010 | türkis 0011 | rot 0100 | magenta 0101 | braun 0110 | hellgrau 0111 | ||||
# | # | # | # | # | # | # | # | HG-Farbe | ||||
# | # | # | # | # | # | # | # | HG-Farbe: | schwarz | 0000 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | blau | 0001 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | grün | 0010 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | türkis | 0011 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | rot | 0100 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | magenta | 0101 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | hellbraun | 0110 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | hellgrau | 0111 | ||
Zeichen Farbe: | dunkelgrau 1000 | hellblau 1001 | hellgrün 1010 | helltürkis 1011 | hellrot 1100 | hellmagenta 1101 | gelb 1110 | weiß 1111 | ||||
# | # | # | # | # | # | # | # | HG-Farbe | ||||
# | # | # | # | # | # | # | # | HG-Farbe: | schwarz | 0000 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | blau | 0001 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | grün | 0010 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | türkis | 0011 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | rot | 0100 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | magenta | 0101 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | hellbraun | 0110 | ||
# | # | # | # | # | # | # | # | HG-Farbe: | hellgrau | 0111 |
Es gibt natürlich bei der Darstellung etwas Schwierigkeiten, da die Darstellung
nun mit der Möglichkeit von 256 pro Farbe erfolgen musste. Es ist zwar
1Bit (DOS) = FFh (8Bit Windows), aber die Grafikkarte interpretiert das wahrscheinlich
auch etwas anders, da wurde etwas angepasst.
Das Macro CCOUT hat wieder 3 Parameter:
CCOUT ZEICH, COLOR, ANZ
ZEICH wird dem Register AL zugeordnet, die Farbe aus COLOR dem Register BL. Will
man also ein weißes Textzeichen auf blauem Untergrund ausgeben, muss hier die
Bitfolge 00011111 gespeichert werden.
# |
Das Bearbeiten der Aufgabe geht wieder sehr gut mit der bekannten
Bedienoberfläche. Als Quelle 1 vereinbaren wir das kleine ASM-Programm, hier mit dem Namen: t_anzb2.asm Als zweite Quelle nutzen wir die Macro-Datei: b_anz2.bib. Mit "w" kann man schnell zwischen den beiden Dateien zum Editor wechseln, das geht natürlich auch mit zwei Windows-Editor-Fenster, allerdings hat man dann einen anderen Zeichensatz (siehe oben). |
Assembliert man "t_anzb2.asm", erhält man, wie bekannt, neben der Objektdatei auch
die LST-Datei "t_anzb2.lst". Die ist natürlich ganz schön umfangreich, so dass
sie hier nicht dargestellt werden soll es gibt sie aber als PDF-Datei:
T_ANZB2_2_LST.pdf. (die Datei wurde nachträglich etwas bearbeitet, ist so nicht das Ergebnis der Assemblierung) Aber es soll ein kleines Stückchen aus dieser Datei dargestellt werden (links). Wenn ein Text aus einem Macro eingesetzt wird, dann erhält bekannter Maßen die Zeile am Anfang eine Zahl, wird "BYTE_ANZ" verwendet, so steht dort eine "1". Wird nun in diesem Teil erneut Text aus einem Makro eingesetzt, so wird einfach weiter gezählt, die "2" steht nun für das Macro "BS_POS". Steht keine Zahl vor der Zeile, so handelt es sich um eine Zeile aus der Quelldatei, in diesem Fall "T_ANZB2.ASM". Man hat so eine recht gute Übersicht, wo man bei Fehlern ansetzen muss. |
|
In den folgenden zwei Bildern wurden nur die Zeilen aus der Quelldatei und aus BYTE_ANZ
dargestellt. Alle weiteren Macros wurden nur noch mit dem Namen vermerkt. An den grünen und roten Unterstreichungen darf man sich nicht stören, diese entstande bei der Bearbeitung der LST-Dtai mit dem Textsystem WORD. Das meckert natürlich über viele Dinge, aber man kann mit WORD bestens formatieren und dann alles unter DOS speichern. Man sieht das auch daran, dass der Rahmen exakt dargestellt wird. |
So sieht das Ergebnis aus:
zurück zur Start-Seite (Beispiele) / weiter Dateien zum System | ||
zurück zur Start-Seite / weiter Aufgabe zum Üben |