Programmieren mit Assembler-Makros:AIternative zur höheren Programmiersprache

23.06.1978

In der Computerwoche sind mehrmals Artikel über die Verwendung von Assembler-Makros erschienen, zuletzt im April 1978. Die dort angegebenen Makros erleichtern das Programmieren im Assembler, machen die Programme lesbarer und fördern die strukturierte Programmierung. Sie schöpfen jedoch die Möglichkeiten, die Makros bieten, bei weitem nicht aus und sind deshalb nur als Ansätze zu betrachten.

Wir haben ein Makrosystem entwickelt, das das Programmieren im 360-Assembler sehr viel weitergehend vereinfacht. Außer Makros zur strukturierten Programmierung (IF-THEN-ELSE, CASE, DO-Schleife, DO-WHILE-Schleife) haben wir auch Makros für die Wertzuweisung, die Ein/Ausgabe, den Aufruf von Prozeduren: einschließlich Parameterüber gabe und für die Deklaration von Daten. Das System ist so weit ausgebaut, daß man vollständige Assembler-Programme schreiben kann, die nur noch aus Makros bestehen, was einer neuen höheren Programmiersprache gleichkommt. Wir nennen diese Programmiersprache MUMS (= maschinenunabhängiges Makrosystem). Ein kleines Beispiel für ein vollständiges Mums-Programm zeigt die Abbildung, der ein PL/I-Kommentar beigegeben ist, aus dem man die Bedeutung der einzelnen Anweisungen unschwer entnehmen kann. Das Programm zeigt die DO-Schleife, die REPEAT-UNTIL-Schleife, das Assignment, das IF-THEN-ELSE, die Ausgabe und die Datendeklaration. Besonders bemerkenswert ist die formatgesteuerte Fortran-ähnliche Ausgabe, die dem Programmierer alle Konvertierungsprobleme abnimmt. Obwohl- dieses Programm keine Ähnlichkeit mit einem 360-Assemblerprogramm hat, ist es ein 360-Assemblerprogramm und wird vom 360-Assembler übersetzt, sofern die Mums-Bibliothek zur Verfügung steht. Selbstverständlich kann man auch Assembler-Befehle in Mus-Programmen verwenden, und so bietet diese Sprache jedem das Gewünschte: Wer in erster Linie seinen Algorithmus klar und kurz ausdrücken möchte, kann seine Assembler-Programme vollständig in Mums-Makros schreiben und dabei sogar rekursive Prozeduren verwenden; wer in erster Linie auf Effizienz bedacht ist, kann weiterhin Assemblerbefehle schreiben und nur zur Ablaufsteuerung, zur Ein/Ausgabe und zum Unterprogrammanschluß die Mums-Makros verwenden. Mums geht auch insofern über die bisher bekannten Assembler-Makro-Systeme hinaus, als es die Deklaration von Feldern und den Zugriff zu Feldelementen gestattet, ohne daß man die Speicherabbildungsfunktion auszuprogrammieren braucht. So wird z. B. das Fortran-Statement: A(I) = B(J)+C(3) durch die Mums-Anweisung: ASSN (A,I), (B,J)+(C,3) dargestellt. Der Gewinn an Kürze und Klarheit gegenüber Ausprogrammierung der Indizierung ist bedeutend. Schließlich gibt es in Mums noch ein System von Testhilfen, mit denen man sich zu jeder Zeit beliebige Speicherplätze und sämtliche Registerinhalte ausdrucken lassen kann, einen Schleifentrace und ein Programmprofil, mit dem man sich ausdrucken lassen kann, wie oft jeder Zweig eines Programms durchlaufen wurde.

Das Mums-System steht nicht nur auf dem Papier, sondern wird seit Jahren von uns verwendet. So sind zum Beispiel mehrere Compiler in Mums geschrieben worden, wobei sich die Einfachheit der Sprache, ihre leichte Erlernbarkeit und ihre Hilfsmittel zur Fehlersuche als außerordentlich nützlich erwiesen haben.

*Lehrkanzlei für Informatik an der Johannes-Kepler-Universität in Linz

ULAMS ITERATIONSPROBLEM RE 01.76 *===== ========================

PRINT NOGEN

ULAM MAIN

INC X, 1, 5, 1 DO X=1 TO 5;

ASSN Y, X Y=X;

ASSN I, 0 I=O;

REPEAT DO WHILE('1 '8);

ASSN REST, Y, MOD, 2 REST=MOD(Y, 2);

IF REST,=, 0 IF REST=0

ASSN Y,/, 2 THEN Y=Y/2;

ELSE ELSE

ASSN Y,*,3,+,1 Y=3*Y+1;

EDS IF

ASSN I,+,1 I=I+1;

UNTIL Y,=,1 IF Y=1 THEN GOTO M;

EDS REP END;

AUS (X,I), (F5) M:PUT EDIT(X,I) (2 F(5)); PUT SKIP;

EDS INC END;

RET

*

DCL X,Y,REST,I

END ULAM