Anwenderbericht: KWS Kleinwanzlebener Saatzucht AG:

Assembler-Makros erleichtern Strukturierte Programmierung

21.04.1978

Im November 1977 hat die Computerwoche über ein TP-Lagerverwaltungssystem der KWS Kleinwanzlebener Saatzucht AG in Einbeck berichtet. Dieses und andere Programmsysteme der KWS wurden in Assembler geschrieben. Mit welchen Hilfsmitteln der Assembler geschrieben. Mit welchen Hilfsmitteln der Assembler auch heutzutage noch zu einem komfortablen und konkurrenzfähigen Werkzeug gemacht werden kann, dürfte auch für andere EDV-Anwender unserer Größenordnung und mit ähnlicher Aufgabenstruktur von Interesse sein.

Wir fahren auf einer IBM/370-15 mit 192 KB unter DOS/VS in 4 Partitions kaufmännische und wissenschaftliche TP- und Batch-Anwendungen und POWER, sind also knapp mit Hauptspeicherplatz. Etwa 7 Mitarbeiter sind an der Programmierung beteiligt, zeitweilig zusätzlich 2 externe. Bei dieser Größenordnung ist eine vollständige personelle Trennung von Organisation, Anwendungs- und Systemprogrammierung schwer durchzuführen. Mehrere ältere in Assembler geschriebene Programmpakete sind zu warten. All das sind Gründe dafür, daß bei uns neben FORTRAN, RPG und demnächst PL1 noch viel in Assembler programmiert wird, beispielsweise sämtliche TP-Anwendungen. Das ist allerdings nur zu empfehlen unter den folgenden organisatorischen und programmiertechnischen Voraussetzungen.

1. Die Dateien sind stark zentralisiert. Beispielsweise gibt es nur eine Datei für sämtliche in der EDV benutzten Schlüssel und ebenfalls nur eine Datei für die Adressen und Konten sämtlicher "Geschäftspartner" (Debitoren, Kreditoren, Angestellte usw.). Datei- und Satzdefinition sind als Copy-Code gespeichert, Zugriffe werden über Standard-Unterprogramme abgewickelt.

2. Für allgemeine Probleme, beispielsweise die Verknüpfung von Suchbegriffen für die Selektion von Daten, die bei stark zentralisierten Dateien recht kompliziert werden kann, gibt es Standardprogramme.

3. Wichtigstes Hilfsmittel, um die Programme zu normieren und übersichtlich zu machen, sind Makros, beispielsweise für Satzgruppenverarbeitung, Druckausgabe, Formatprüfungen und Fehlermeldungen.

Um auch komplizierte Probleme (zum Beispiel Bildschirmdialoge) wartungsfreundlich in Assembler lösen zu können, haben wir 1976 ein Makrosystem für Strukturierte Programmierung entwickelt. Dadurch wurde die Assemblersprache im Hinblick auf Schreibaufwand und Lesbarkeit höheren Programmiersprachen angenähert im Hinblick auf Strukturierung konventionellen Sprachen wie FORTRAN und COBOL sogar teilweise überlegen. Zwei Tage genügten, um unsere Programmierer mit dem System vertraut zu machen. Die oft gehörten Klagen über Startschwierigkeiten bei der Einführung der Strukturierten Programmierung sind uns nicht ganz verständlich. Unser System basiert auf dem Prinzip der strengen Unterscheidung und möglichen Überlappung von Auswahl- und Wiederholungsblöcken (DOCASE-System von S. Vetter, Uni Heidelberg, 1976), allerdings mit einigen Einschränkungen und Erweiterungen. Es enthält zwei Gruppen von Makros:

1. Makros für die Fallunterscheidung: IF (erster Fall), ELSIF (zweiter und weitere Fälle), ELSE (Restfall), ENDIF (Blockende).

2. Makros für die Wiederholung: DO (Schleifenanfang), ENDDO (Schleifenende), REPEAT (Sprung zum DO), BREAK (Sprung zum ENDDO).

Beim IF und ELSIF sind als Bedingungen nicht nur die Ergebnisse von Zahlen- und Zeilenvergleichen angebbar, sondern auch die Ergebnisse von Format- und Schlüsselprüfungen. Hierfür ein einfaches Beispiel: Lesen, Prüfen und Korrigieren von Eingabedaten im Dialog. Gelesen wird der Inhalt zweier Felder, von denen das erste eine linksbündige Zahl oder "XX" enthalten soll, das zweite ein Datum. Den Programmcode hierfür zeigt die Abbildung.

Die Kombination von Assemblersprache und Struktur-Makros ermöglichte uns, weitere Hilfsmittel zu entwickeln, die sonst die Möglichkeiten eines relativ kleinen Anwenders übersteigen: z. B. Halbcompiler, d h. Programme, die sich selbst modifizieren, indem sie oft zu ändernde Steuerangaben aus einer stark problemorientierten, leicht lern- und lesbaren Sprache in den Maschinencode übersetzen und sofort ausführen. Diese Programm-Modifikationen kann der Arbeitsvorbereiter ohne Hilfe des Programmierers vornehmen.

Hierfür ein Beispiel:

Für die Selektion von Daten wurde ein Halbcompiler als Unterprogramm entwickelt, das Vergleiche und Verknüpfungen von Vergleichsergebnissen durchführt. Das Hauptprogramm ist von der komplizierten Verknüpfungslogik entlastet. Es übergibt dem Unterprogramm die Selektionsanweisungen und die Adressen der Datenbereiche und empfängt nach jedem weiteren Aufruf die Rückmeldung, ob die Daten den Selektionsbedingungen genügen oder nicht.

Für solche und ähnliche Aufgaben ist eine Assemblersprache mit komprimierenden und strukturierenden Makros das geeignete Werkzeug.