Zusammenfassung
Die Transformation von Assembler in eine 3. Generations-Sprache (3GL) hat eine sehr große Spannbreite von Problemen zu berücksichtigen. Beispielhaft werden die Problembereiche dynamische Codemodifikation, Typabschätzung von Variablen, und Erkennung von Tabellen- und Zeichenketten-Verarbeitung diskutiert. Die vorgestellten Lösungsansätze werden in ihrer Tragfähigkeit beleuchtet und mit anderen Lösungsansätzen verglichen.
Eine Gegenüberstellung der unterschiedlichen Sprachfeatures von Assember und einer typischen 3GL gibt einen ersten Eindruck von dem großen semantischen Abstand der beiden Sprachebenen:
Ein Beispiel für eine einfache 1:1-Transformationen, bei der sich in der Zielsprache ein analoges Konstrukt bilden lässt, ist
Aber meistens geht es schwieriger zu:
ist eine typische Sequenz aus einem Anwendungsprogramm, die als CALL UPB112 interpretiert werden muß. Während die folgende Sequenz aus einem Betriebssytem-Makro
in der Regel nicht mehr interpretierbar ist, weil über den Inhalt von XYZ nichts mehr ausgesagt werden kann.
Die erste Sequenz kann auch nur dann maschinell als CALL UPB112 interpretiert werden, wenn R15 evaluiert wird, d..h. über eine statische Datenfluß-Analyse der mögliche Inhalt von R15 bestimmt wird:
Diese Datenfluß-Analyse ist relativ aufwendig (sowohl was ihre Implementierung als auch was die Performance zur Laufzeit betrifft) und fuhrt nur deswegen zum Ziel, weil ein üblicher Stil in der kommerziellen Programmierung ist, die beiden Zeilen direkt hintereinander zu schreiben — während in der Systemprograrnmierung zum Stil gehört, die Adresse an irgendeiner Stelle nach XYZ zu laden. Es ist fast aussichtslos, XYZ zu evaluieren — jede Kontrollflußverzweigung macht es unwahrscheinlicher, daß genau 1 Quelle für XYZ bestimmt werden kann.
Der BALR könnte in der Sprache PL1 auch in ein “CALL LABXYZ” transformiert werden, mit LABXYZ als Label-Variable (eine Variable, der man Labels wie UPB112 zuweisen kann), in C wäre LABXYZ ein Function-Pointer. Das ist aber nicht Sinn einer Assembler-Transformation — die Sprachebene wird nicht wirklich verlassen. Der Fortschritt der 3. Generation-Sprachen gegenüber Assembler bestand u.a. gerade darin, die Freiheitsgrade des Assembler einzuschränken und damit mehr semantische Klarheit in den Programmcode zu bringen. In der Anweisung
ist Register 15 eine Variable (man könnte sagen: 1 Freiheitsgrad). Um zu bestimmen, wohin der Kontrollfluß verzweigt, muß der Inhalt von Register 15 bestimmt werden. Wohingegen in
kein Freiheitsgrad mehr enthalten ist, der Kontrollfluß verzweigt zur Prozedur UPB112, die semantische Aussage des Programmcodes ist eindeutig.
Aus diesem kleinen Beispiel lassen sich bereits einige vorläufige Schlußfolgerungen ziehen, die in den folgenden Abschnitten noch vertieft werden:
-
wie schwierig die automatische Transformation eines konkreten Programms ist, hängt weniger vom verwendeten Befehlssatz ab als davon, wie weit die Freiheitsgrade, die dieser Befehlssatz erlaubt, in dem Programm ausgenutzt wurden
-
der Grad der Automatisierung hängt damit vom Programmierstil ab
-
um einen Freiheitsgrad deterministisch einzuschränken, ist meist eine Datenfluß-Analyse notwendig
-
erst als Ergebnis der Datenfluß-Analyse stellt sich heraus, ob die konkrete Assemblerformulierung auf 3GL-Niveau transformiert werden kann oder nicht.
Im folgenden werden einige grundlegende Probleme und Lösungsansätze für die Assemblertransformation vorgestellt. Diese sind in einem Tool mit Namen REASMQEN verwirklicht. Die Erfahrungen mit REASMQEN beleuchten die Tragfähigkeit und die Grenzen dieser Lösungsansätze.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
Literatur
Aho, Alfred; Sethi, Ravi; Ullman, Jeffrey: Compiler-Bau. Addison-Wesley 1988
Yang, H.: The Supporting Environment for a Reverse Engineering System — The Maintainer’s Assistant. In: Proceedings Conference on Software Maintenance, IEEE 1991
Bennett, K.; Bull, T.; Yang, H.: A Transformation System for Maintenance. In: Proceedings Conference on Software Maintenance, IEEE 1992
Rich, Charles; Waters, Richard: The Programmer’s Apprentice. Addison-Wesley 1990
Editor information
Rights and permissions
Copyright information
© 1996 Springer Fachmedien Wiesbaden
About this chapter
Cite this chapter
Schultz, K. (1996). Probleme und Lösungskonzepte für die Transformation der Programmiersprache 370-Assembler. In: Lehner, F. (eds) Softwarewartung und Reengineering. Information Engineering und IV-Controlling. Deutscher Universitätsverlag, Wiesbaden. https://doi.org/10.1007/978-3-663-08951-3_17
Download citation
DOI: https://doi.org/10.1007/978-3-663-08951-3_17
Publisher Name: Deutscher Universitätsverlag, Wiesbaden
Print ISBN: 978-3-8244-6294-0
Online ISBN: 978-3-663-08951-3
eBook Packages: Springer Book Archive