Assembler-Beispiel 5 |
MACROS
Dieses Thema soll nur kurz behandelt werden, es ist eine besondere Leistung des Assemblers und kann die Programmierarbeit vereinfachen, es ist keine weitere Leistung des Prozessors.
Was leisten Macros?
Und so funktionieren MACROS:
Im Programm (links) wird ein Name für die Befehlsgruppe an der Stelle, wo sie
eingesetzt werden soll, angegeben. In der Bibliotheks-Datei wird nach dem Namen gesucht. Danach muss dann die Bezeichnung "MACRO" stehen und es können Parameter folgen. In den nächsten Zeilen folgen dann die Befehle, die ins Programm eingesetzt werden sollen. Das geht solange bis die Endekennung "ENDM" gefunden wird. |
So könnte dann ein Macro aussehen:
Der Name des Macros ist "TAST_ECHO_AL".
Danach wird dieser Name als "MACRO" definiert.
Der Macro-Name wird nicht durch ":" beendet.
Die Befehlsfolge, die zu diesem Macro gehört, wird mit "ENDM" beendet. Im
Gegensatz zum UP steht davor nicht noch einmal der Macro-Name! Die Befehlsfolge wird in eine Datei geschrieben, hier MACRO.BIB, dort wird die Folge dann bei Bedarf unter dem vereinbarten NNamen gefunden. Der Name der Datei ist beliebig, er wird im Basis-Programm ohnehin vereinbart, aber "BIB" deutet schon mal auf Bibliothek hin. Das Macro organisiert über die DOS-Funktion eine Tastatureingabe, der ASCII-Code des Tastaturzeichens landet im AL-Register und wird gleichfalls auf Bildschirm ausgegeben. |
Oben wurde bereits darauf hingewiesen, dass Macros auch Entscheidungen treffen
können, besser, das Textverarbeitungssystem kann anhand von Bedingungen
unterschiedliche Texte einbinden.
Solche Bedingungen gibt es:
Können auch mit ELSEIF geschachtelt werden (Bedingung2). |
Bedingungen können sein:
|
MAC_X | MACRO vergl | |
IF (vergl EQ AL) OR (vergl EQ AH) | ||
... | ||
ELSE | ||
... | ||
ENDIF | ||
ENDM |
Nun aber wieder zu unserem Beispiel:
wir wollen die Textausgabe und die Warteschleife als Macro mit ins Programm
einbeziehen. TXT_AUS ist der Name fürs Macro der Textausgabe, WARTE der für die Warteschleife. Und gleich gibt es wieder sehr gute Unterstützung, denn hinter dem Namen WARTE steht ein Wert, der soll als Anzahl der Durchläufe für die äußere Warteschleife genutzt werden. Und hinter TXT_AUS wird als Parameter der Bezug zum Text (text) angegeben - solche Möglichkeiten bieten Macros.
Wichtig ist nun aber, dass dem Programm bekannt gegeben werden muss, wo die Macros zu
finden sind. |
Die LST-Datei zum Beispiel zeigt die Änderungen. Überall wo die Zeilen aus einem Macro eingefügt wurden, steht noch vor der Zeilennumerierung eine 1. Oben hinter INCLUDE folgt auch eine 1, hier würde ohne .XLIST die gesamte Macro-Datei ausgelistet werden (da können dann auch andere Zahlen stehen). Zeile 21 bis 27 wurde die Textausgabe eingefügt, das wurde wieder mit der 1 gekennzeichnet. Ab Zeile 30 folgt dann das Einfügen der Warteschleife. Der Parameter wird ordnungsgemäß dem Register BX zugeordnet. Dann gibt es aber etwas Besonderes, die Marken werden sehr eigenartig geschrieben. Das kann man am Macro besser klären. |
Um sicher zu gehen, dass die Marken auch nur in dem Macro verwendet werden dürfen,
gibt es im Macro die Anweisung LOCAL M0,M1 Beim Einsetzen der Textfolge vergibt der Editor nun neue Marken, die garantiert nur hier vorkommen. Damit kann man ohne große Überlegung jede beliebige Marke verwenden! |
Im letzten Beispiel sollen nun alle bisherigen Beschreibungen zusammen in einem Beispiel angewendet werden
zurück zur Start-Seite (Beispiele) / weiter Beispiel 6 | ||
zurück zur Start-Seite |