Melden Sie sich hier an, um auf Kommentare und die Whitepaper-Datenbank zugreifen zu können.

Kein Log-In? Dann jetzt kostenlos registrieren.

Falls Sie Ihr Passwort vergessen haben, können Sie es hier per E-Mail anfordern.

Der Zugang zur Reseller Only!-Community ist registrierten Fachhändlern, Systemhäusern und Dienstleistern vorbehalten.

Registrieren Sie sich hier, um Zugang zu diesem Bereich zu beantragen. Die Freigabe Ihres Zugangs erfolgt nach Prüfung Ihrer Anmeldung durch die Redaktion.

14.10.1977 - 

Neue Assembler-Makrosprache für PDP-11-Anwender:

Strukturierung und Modul-Kommunikation gegen unproduktive "Bit-Fummelei"

MÜNCHEN (uk) - Konnten PDP-11-Anwender bisher nur zwischen dem MACRO-11-Assembler und FORTRAN als Sprachen für Systemprogramme wählen, weil keine Alternativen für Programmieraufgaben wie Prozeßsteuerungen, Realtimeanwendungen oder Systemsoftware existierten, so stehen neuerdings eine Reihe sogenannter "System Implementation Languages (SIL)" zur Verfügung. Diese Makro-Sprachen sollen moderne Softwaremethoden wie Strukturierung oder Top-Down-Design auch in die Assemblerprogrammierung einführen und dadurch wesentliche Produktivitäts-Verbesserungen gegenüber konventionellen Programmiermethoden ermöglichen. Das auf Minicomputer spezialisierte Systemhaus Tewidata, München, hat jetzt als Bestandteil seines Systementwicklungs-Verfahrens TOPS (TewidataOrthoProgrammingSystem) die Makroprogrammiersprache TIL (Tops-Implementierungs-Language) vorgestellt, die als Preprocessor für Macro-11-Assemblerprogramme eingesetzt werden kann. Wie mit Hilfe dieses Generators die strukturierte Programmierung auch in der Assemblerprogrammierung angewendet werden kann, lesen Sie im folgenden Beitrag:

Ein übliches Argument lautet, daß mangels allgemeingültiger Programmstrukturen Assemblercode schwierig zu schreiben, zu lesen, zu testen und zu warten sei - ein Argument, das sicherlich für die meisten Assemblerprogramme gültig ist. Man muß jedoch

akzeptieren, daß für eine Reihe von Programmieraufgaben keine andere Alternative existiert.

Anstelle des Versuchs, Sprachelemente aus FORTRAN oder ALGOL in die Assemblersprache zu transferieren (eine durchaus übliche Vorgangsweise), wurde eine neue Sprache entwickelt, die auf den elementaren systemtheoretischen Grundlagen der Programmentwicklung basiert.

System-Module als "Black-Box"

Soll die "top-down"-Designmethode mehr sein als eine intellektuelle Übung in einem frühen Stadium eines Entwicklungsprojektes, ist eine fundamentale Voraussetzung, daß die einzelnen Module und Routinen eines komplexen Systems als "black-box" anzusehen sind die aus den Eingabevariablen abgeleitete Ausgaben produzieren. Was als eher triviales Modell erscheint, entpuppt sieh aus der Sieht der Implementierung als nicht-triviale Forderung:

- Der Ablauf einer Routine wird durch eine genau festgelegte Zahl von Eingabevariablen beeinflußt, deren Wert zum Zeitpunkt der Aktivierung einer Routine sinnvoll festgelegt ist.

- Die Routine generiert voraussagbare Ausgabewerte, die ausschließlich von den Eingabewerten abgeleitet sind, durch Modifizierung des kombinierten Zustandes der exakt festgelegten Anzahl von Ausgabevariablen.

Diese Forderungen können erfüllt durch folgende Steuermechanismen für den Aufruf und festgelegte Prozeduren werden:

- Routinen (Module) sind nicht aufrufbar, ausgenommen:

- am Eingangspunkt, legale Operation: Übernahme der Programmkontrolle,

- über das Fenster der Eingabevariablen, legale Operation: Schreiben.

- Eine Routine hat zum gesamten Speicher keinen Zugriff, ausgenommen:

- der Code einer Routine, legale Operation: Ausführung.

- Das Fenster der Eingabevariablen, legale Operation: Lesen.

- Das Fenster der Ausgabevariablen, legale Operation: Schreiben.

- Der temporäre Speicherbereich einer Routine, legale Operation, Schreiben/ lesen/ Schreiben.

- Der permanente Speicherbereich einer Routine, legale Operation: Lesen.

- Der Eingangspunkt eines Mechanismus, der eine Rückkehr zur aufrufenden Routine bewirkt, legale Operation: Übernahme der Programmkontrolle.

- Die Ausführung einer Routine wird beendet durch die Übergabe der Programmkontrolle am Eingangspunkt des Rückkehrmechanismus.

- Die spezifizierten Eingabe- und Ausgabeparameter eines Aufrufs stimmen mit der Definition des Fensters für Eingabe und Ausgabe in der Anzahl, Type und Format überein.

Das Nichtvorhandensein dieser Aufrufssteuermechanismen bewirkt unerwünschte Nebeneffekte in der Programmierung, bekannt als "bugs":

- Routinen lesen Ausgabevariable und beschreiben Eingabevariable;

- generieren zusätzliche Ausgaben in nichtdefinierten Speicherbereichen;

- Nichtfreigabe von temporären lokalen Speicherbereichen;

- "Rückkehr" zu unbestimmten Speicherbereichen.

Wenn nur ein Modul eines Systems diese fehlerhafte Struktur enthält wird das Verhalten des gesamten Systems unvorhersehbar; die Ursache des Fehlers kann weder durch Überprüfen des Designs des Systems noch des Codes eines einzelnen Moduls lokalisiert werden.

TlL-Prozeduren und Modul-Kommunikationen

Die TOPS-11-Implementierungs-Sprache TIL erfüllt die Voraussetzungen für die Kommunikation zwischen Modulen und deren Schutz.

Der Aufruf einer Routine über

CALL Name, <Eingabe-Liste>, <Ausgabe-Liste>, <Status>

stellt die Kommunikation zu einer Routine her, deren Eingangspunkt und die Fenster der Variablen definiert sind durch

ENTRY Name, <formale Eingabe>, <formale Ausgabe>

Temporäre Speicherbereiche (zusätzlich zu den Hardwareregistern) können definiert werden durch

DECL LOCAL, <locvar-Liste>

Nach der Aktivierung der Routine am Eingangspunkt wird die Zulässigkeit der CALL-Parameter geprüft und die lokalen Variablen zugeordnet. Die aktuellen Adressen der lokalen Variablen wie auch die CALL-Parameter sind dem Programmierer unzugänglich. Ein Zugriff zu diesen Parametern erfolgt ausschließlich über GET- und SET-Instruktionen:

GET Eingabe-Parameter, TO Register

SET Ausgabe-Parameter: = Expression

GET locvar TO Register

SET locvar: = Expression

Jeder Versuch, diese Instruktionen falsch anzuwenden, zum Beispiel

SET Eingabe-Parameter: = Expression

resultiert in einem Assemblerfehler.

Der Ablauf einer Routine wird durch den Befehl

RETURN <Status>

beendet. Temporäre Speicherbereiche werden freigegeben, die einwandfreie Rückkehr ins aufrufende Programm wird damit gewährleistet. Ablaufoder Fehlerbedingungen können über eine Statusvariable an das aufrufende Programm transferiert werden.

Die Anwendung dieser einfachen Kommunikation zwischen Programmmodulen hat eine drastische Verbesserung der Produktivität von Programmiern ergeben.

Algorithmussprache und Programmiersprache sollten gleich sein

In der Designphase eines Entwicklungsprojektes hat ein Software-Ingenieur die Aufgabe, ein System in Einzelmodule zu zerlegen, die streng zugeordnete Funktionen ausführen, sowie die Verbindung zwischen den Moduln zu definieren.

Die Implementierung von Moduln oder Routinen kann in drei unterschiedliche Stufen aufgeteilt werden:

- Der höchst kreative Prozeß, einen Algorithmus zu finden, der die gewünschte Funktion beschreibt;

- die formale Beschreibung des Algorithmus

- die Übertragung des Algorithmus eine im Computer ablauffähige Form.

Die ersten beiden Aktivitäten dürfen nicht unabhängig voneinander betrachtet werden. Der Sprache oder der Notation, die wir als Ausdruck unserer Gedanken verwenden, ist das Hauptaugenmerk zu widmen. Durch eine geeignete Sprache (ADL - Algorithm Description Language) wird es für Software-Ingenieure einfacher, Algorithmen zu finden und zu beschreiben. Einen der Funktion entsprechenden Algorithmus zu entwerfen und zu beschreiben ist von der Programmiersprache unabhängig während die Probleme bei der Übertragung des Algorithmus in den maschinenablauffähigen Code mit der Differenz zwischen ADL und Programmiersprache komplexer werden. Idealerweise sollten ADL und Programmiersprache gleich sein. Dies reduziert die Übertragungsfehler zu Null. Für das TOPS-11-Programmiersystem wurde eine von Dijkstra vorgeschlagene ADL ausgewählt. Die Programmiersprache TIL wurde auf den grundsätzlichen Befehlen dieser DL aufgebaut. TIL kommt dem geforderten Ideal - ADL gleich der Programmiersprache - sehr nahe.

Mitarbeiter der Tewidata GmbH, München