191 79 9MB
German Pages 142 [148] Year 1960
G Ü N T S C H • DIGITALE
RECHENAUTOMATEN
EINFÜHRUNG IN DIE PROGRAMMIERUNG DIGITALER RECHENAUTOMATEN
MIT B E S O N D E R E R B E R Ü C K S I C H T I G U N G D E R Z 22
VON
DR. F R I T Z R U D O L F G Ü N T S C H
WALTER D E G R U Y T E R & CO. / B E R L I N W35 VORMALS G. J. G Ö S C H E N ' S C H E VERLAGSHANDLUNG VERLAGSBUCHHANDLUNG -
GEORG REIMER -
J. GUTTENTAG
K A R L J. T R Ü B N E R -
B E R L I N 1960
V E I T & COMP.
AM
© Copyright 1960 by Walter de Gruyter & Co., Berlin W 35. — Alle Rechte, einschl. der Rechte der Herstellung von Photokopien und Mikrofilmen, vom Verlag vorbehalten. — Printed in Germany. — Archiv-Nr. 1236 60. — Satz: Walter de Gruyter & Co., Berlin W 85. — Druck: Paul Funk, Berlin W 30.
Vorwort Diese Einführung in die Programmierung digitaler Rechenautomaten fußt auf den Vorlesungen über das gleiche Thema, die ich — ergänzt durch. Vorlesungen über die Theorie digitaler Rechenautomaten — als Lehrbeauftragter an der Technischen Universität Berlin in den Wintersemestern 1956/57 und 1957/58 gehalten habe. Es ist mir ein dringendes Bedürfnis, an dieser Stelle Herrn Prof. Dr. W. Haack sehr herzlich für die vielfache Unterstützung zu danken, die er mir, als seinem damaligen Assistenten, hat zuteil werden lassen. Weiter habe ich Herrn Dr. W. Egloff und Herrn Dr. H. Hotes in Berlin sowie Herrn Dr. Henschel für viele interessante Diskussionen über die didaktische Gestaltung dieser Schrift zu danken. Da in dieser Programmierungseinführung weder die Verfahren der praktischen Analysis noch die Theorie elektronischer Rechenautomaten erläutert werden sollen, habe ich es folgerichtig gefunden, mit wenigen — mathematisch verschiedenen — Programmbeispielen und mit einer Beispiel-Maschine auszukommen. Allerdings werden die Programmbeispiele und die Beispiel-Maschine dauernd variiert, um die jeweils zu diskutierenden Programmierungsmethoden zu erläutern. Als Beispiel-Maschine ist die Z 22 der Zuse KG. gewählt worden, weil sie durch ihren außerordentlich flexiblen Befehlscode, der nur durch ausgefeilte Programmierungsmethoden für den Benutzer praktisch brauchbar wird, in besonderem Maße Anspruch auf die Bezeichnung Universalrechner hat. Sie ist also besser als viele andere Maschinen in der Lage, andere Rechner und die zugehörigen Programmtechniken zu simulieren, und daher besonders gut zum Studium der verschiedensten Verfahren geeignet. Zur Abgrenzung des dargebotenen Stoffes sei ferner bemerkt, daß in dieser Einführung einige wichtige Kapitel der Programmierungstechnik, wie z. B. der Betrieb gestaffelter Speicher mit Blockübertragung, Magnet-
6
Vorwort
bandbetrieb, Formelübersetzung usw., nicht behandelt werden, weil die Einbeziehung dieser Themen den Rahmen dieser Einführung gesprengt hätte. Zum weiteren Studium werden daher neben den im Text zitierten Literaturstellen die zum Teil recht umfangreichen Programmierungs-Lehrbücher des anglo-amerikanischen Sprachgebietes empfohlen. Juni 1960
F. R. G ü n t s c h
Inhaltsverzeichnis Seite
Vorwort
5
1
Einleitung 1.1 Die manuelle Bearbeitung numerischer Aufgaben 1.2 Der Einsatz eines Rechenautomaten 1.3 Kurze Beschreibung der Z 22 1.31 Die technische Realisierung der Hauptteile der Z 22 1.32 Die Zahlendarstellung im Inneren der Z 22 1.33 Der Befehlscode der Z 22
6 6 13 17 17 20 25
2
Über die Notierung v o n Programmen 2.1 Einige oft benutzte Abkürzungen 2.2 Der Befehlscode . 2.21 Vorbemerkung 2.22 Die Befehlsliste 2.3 Befehlsfolgen 2.4 Das Flußdiagramm
25 25 26 26 27 29 29
3
Lineare und zyklische Programme 3.1 Lineare Programme 3.2 Zyklische Programme 3.21 Zyklische Programme mit einer festen Anzahl von Durchläufen 3.22 Zyklische Programme mit variabler Anzahl von Durchläufen
31 31 39 39 52
4
Symbolische Adressen
55
5
Mehrfach zyklische Programme
62
6
Die Versorgung v o n Unterprogrammen mit Parametern . . . . 6.1 Unterprogramme, die nicht selbst weiteren Unterprogrammen übergeordnet sind 6.2 Verschachtelte Unterprogramme
71 72 80
Klassifizierung v o n Adressenänderungen nach Burks, Goldstine, v. N e u m a n n 7.1 Änderungen 1. Art 7.2 Änderungen 2. und 3. Art
84 85 90
7
Inhaltsverzeichnis
8
8 Automatisierung von Adressenänderungen 8.1 Automatisierung der Änderungen 1. Art 8.2 Automatisierung der Änderungen 2. Art 8.21 Automatisierung von Blocktransporten 8.22 Ablaufnotierung und Adressentranslation 8.23 Zusätzlich zu (8.22) nachfolgende Adressensubstitution . . . 8.24 Besonderheiten bei verschachtelten Unterprogrammen . . . 8.3 Automatisierung der Änderungen 3. Art
90 90 93 93 94 96 97 100
9 Programmumdeutung und -Umrechnung 9.1 Hauptanwendungen 9.11 Bequemer Extern-Code 9.12 Die Erledigung von Umordnungsprozessen 9.13 Simulierung von Rechnern 9.14 Protokollierung 9.2 Programmumdeutung (interpretative Technik) 9.3 Programmumrechnung (Superprogrammtechnik) 9.4 Vergleich von Programmumrechnimg und -umdeutung
105 106 106 108 108 109 109 111 112
10 Ein Externcode für die Z 22 und seine Beziehung zum Interncode 10.1 Der interne Befehlscode der Z 22 10.2 Die externe Notierung von Zahlen und Befehlen für die Z 22 bei Verwendung eines Standard-Leseprogrammes 10.21 Gewöhnliche Befehle 10.22 Funktionsbefehle 10.23 Bandbefehle 10.24 Dezimalzahlen 10.25 Klartext
122 124 125 126 126 127
11 Eine 11.1 11.2 11.3 11.4
127 130 131 132 136
Literatur
Programm- und Adressen-Organisation Allgemeine Beschreibung Aufmachung der Programme Ein Programm-Beispiel Zur Arbeitsweise des Adressierprogramms
113 114
141
1 Einleitung 1.1 Die manuelle Bearbeitung numerischer Aufgaben Jede umfangreiche numerische Rechnung verlangt eine ausführliche Vorbereitung. Es ist selbstverständlich, daß die eigentliche Rechnung in hohem Maße davon abhängt, welche Hilfsmittel zur Verfügung stehen. Das gleiche gilt aber auch für die Vorbereitungen. So wird zum Beispiel die Ausarbeitung von Rechenformularen für ein großes Rechenvorhaben davon beeinflußt, ob es von nur einem Rechner oder — entsprechend schneller — gleichzeitig von vielen Rechnern abgewickelt werden soll. Trotz dieser Unterschiede läßt sich für die Vorbereitung und Durchführung aller Rechnungen ein gemeinsames Schema aufstellen. Dieses Schema gilt überdies unabhängig davon, ob die ursprüngliche Aufgabe einer wissenschaftlichen, technischen oder kaufmännischen Fragestellung entspringt. Wir wollen die einzelnen Abschnitte des Schemas im folgenden darlegen und für den Fall erläutern, daß die Rechnung von mathematisch nicht geschultem Personal unter Verwendung gewöhnlicher Tischrechenmaschinen durchgeführt wird. 1. Abschnitt: Mathematische Formulierung. Beim ersten vorbereitenden Schritt muß eine mathematische Formulierung der Aufgabe gefunden werden. Dieser Schritt besteht im einfachsten Falle darin, Wörter und Sätze durch mathematische Formelzeichen zu ersetzen. Bei einfachen kommerziellen Rechnungen ist es zum Beispiel gebräuchlich, die Aufgabe durch Sätze der Form „Zeitlohn gleich Stundenlohn multipliziert mit Arbeitszeit" darzustellen. In diesem Fall würde die mathematische Formulierung einfach lauten Z = S-t. Hier liegt also die Aufgabe eigentlich schon in Form einer Rechenvorschrift vor; nur ist die Art der Notierung etwas weitschweifig. Bei den meisten Aufgaben wird jedoch eine Auskunft über Zusammenhänge verlangt, die einer Rechnung nicht ohne weiteres zugänglich sind. Dieser Fall tritt bei allen Problemen auf, die einer wissenschaftlichen oder
10
Einleitung
technischen Fragestellung entstammen. Hier müssen die fraglichen Zusammenhänge überhaupt erst einmal mathematisch erfaßt werden: Es muß ein mathematisches Modell gefunden werden. B e i s p i e l : Es soll die Strömung durch das Schaufelgitter einer Turbine berechnet werden. Für die hier vorliegenden physikalisch-technischen Zusammenhänge stehen eine Reihe von mehr oder weniger brauchbaren mathematischen Modellen zur Verfügung. Für bestimmte Zwecke ist es zum Beispiel ausreichend, als mathematisches Bild die ebene, inkompressible, wirbelfreie Strömung zu benutzen. Damit ergibt sich als mathematische Formulierung eine Randwertaufgabe der ebenen Potentialtheorie. 2. Abschnitt: Numerisches Verfahren. Die mathematische Formulierung einer Aufgabe enthält im allgemeinen noch keine Aussage über den Weg, auf dem eine numerische Lösung des Problems gefunden werden kann. Daher ist es nötig, ein Verfahren auszusuchen bzw. aufzustellen, das die Lösung explizit und unter ausschließlicher Verwendung von mathematischen Operationen liefert, die mit Hilfe der verfügbaren Rechenhilfsmittel ausgeführt werden können. Dieses Verfahren wird auch in Form mathematischer Gleichungen notiert. B e i s p i e l : Die mathematische Form eines Problems sei etwa eine gewöhnliche Differentialgleichung folgender Art: %
=
n*,y).
Die Berechnung der Lösung dieser Differentialgleichung kann nicht unmittelbar in Angriff genommen werden, weil sie sich im allgemeinen nicht in die explizite Form y{x) = G{x) überführen läßt und weil die Operation
beispielsweise auf einer Tisch(tX rechenmaschine nicht ausgeführt werden kann. Eine numerische Lösung erhält man etwa durch das bekannte Verfahren von Runge und K u t t a . Dabei wird der Differentialquotient durch einen Differenzenquotienten ersetzt, und geeignet gewogene Mittelwerte liefern die Lösung y(x) explizit in einem diskreten Punktraster x(. 3. Abschnitt: Algorithmus. Der nächste Schritt besteht in der sogenannten algorithmischen Formulierung des numerischen Verfahrens. Dabei wird unter Verwendung bestimmter Symbole ein genauer Plan für die Reihenfolge der einzelnen Verfahrensschritte festgelegt. Die algorithmische Formu-
Die manuelle Bearbeitung numerischer Aufgaben
11
lierung ist also eine detaillierte Notierung des numerischen Verfahrens in symbolischer Form, die so abgefaßt ist, daß aus ihr, auch ohne das Verfahren zu verstehen, die Rechenanweisungen abgeleitet werden können. Sie erweist sich vor allem bei umfangreichen und unübersichtlichen Rechnungen als ein wirksames Hilfsmittel für die fehlerfreie Ausarbeitung der eigentlichen Rechenanweisungen. Beispiel: Ein numerisches Verfahren möge unter anderem die Berechnung einer Punktion x3 V = (a+xf für x = 0; 0,2; 0,4; . . . 2,0 erfordern. Betrachtet man diese Gleichung, so läßt sich ohne Kenntnis des Verfahrens nicht entscheiden, welche der Größen a, x oder y bekannt und welche mittels dieser Gleichung zu berechnen sind. Um die Notierung von Gleichungen in dieser Hinsicht eindeutig zu machen, führte Zuse das sogenannte Ergibtzeichen ein [1], Die Gleichung erhält dann die Form •y-
(a + xf
Eine derartige Vorschrift besagt, daß die auf der linken Seite auftretenden Größen in der angegebenen Weise miteinander verknüpft werden sollen. Die Zahlenwerte aller auf der linken Seite vorkommenden Variablen (hier a und x) müssen also spätestens in dem Augenblick bekannt sein, in dem die Vorschrift angewendet werden soll. Das Ergebnis dieser Rechnimg ist wiederum eine Zahl. Die rechte Seite (hier y) gibt an, wie diese Zahl benannt werden soll. In unserem Beispiel soll die Funktion y(x) für eine Reihe von Werten x berechnet werden. Das wird nach einem Vorschlag von Rutishauser [2] in symbolischer Form folgendermaßen notiert: Für i = 0: Für i = 0(1)10:
0 (
xt ^
Xi + 0 , 2
^ .
Die verschiedenen Wertepaare x und y werden durch einen Index i gekennzeichnet. Die Zeichenfolge a(d)e besagt, daß der Index i die Werte a, a -\-d, a-\-2d. ..., e durchlaufen soll. Die Angabe Für i = . . . : bedeutet,
14
Einleitung
die entsprechenden Operationen in der richtigen Reihenfolge abgewickelt werden. Der Funktion des Leitwerks entspricht also die Tätigkeit der Bedienungsperson einer Tischrechenmaschine. Wir wollen nun sehen, wie der Einsatz eines Rechenautomaten die Vorbereitung einer Rechnung beeinflußt. Wir gehen daher die einzelnen Abschnitte noch einmal durch. 1. Abschnitt: Mathematische Formulierung. Die Auswahl eines mathematischen Modells für die Lösung eines Problems hängt naturgemäß von der Leistungsfähigkeit der verfügbaren Rechenmittel ab. Bei Einsatz eines Rechenautomaten kann man unter Umständen ein mathematisches Bild verwenden, das die in der Aufgabenstellung enthaltenen Zusammenhänge besser wiedergibt. B e i s p i e l : Für die Erfassung der Strömungsvorgänge in einer Gasturbine ist die Modellvorstellung der inkompressiblen Strömung in mancher Hinsicht unbefriedigend. Bei Verwendung großer Rechenautomaten ist es möglich, die Voraussetzung deir Inkompressibilität fallenzulassen. 2. Abschnitt: Numerisches Verfahren. Auch die Auswahl numerischer Verfahren wird durch die Rechenmittel mitbestimmt. Wir wollen das an folgendem einfachen Beispiel zeigen: Kommen bei einem mathematischen Verfahren Entwicklungen nach transzendenten Funktionen vor, so werden bei der „manuellen" Rechnung Funktionstabellen verwendet. Für das Herauslesen der Funktionswerte aus den Tafeln ist es gleichgültig, welche Funktionen in dem Verfahren vorkommen. Deshalb spielt der Gesichtspunkt des Arbeitsaufwandes für die Auswahl des Funktionensystems keine Rolle. Anders ist es beim Einsatz eines Rechenautomaten. Hier werden meistens keine Funktionstabellen benutzt, sondern die Funktionswerte werden aus Näherungsformeln — Polynomen oder rational gebrochenen Funktionen — berechnet. Man wird daher für das Verfahren möglichst solche Funktionen auswählen, die sich bequem, d. h. mit kleinem Rechenaufwand approximieren lassen. 3. Abschnitt: Algorithmus. Die Formulierung des eigentlichen Algorithmus wird durch die Auswahl der Rechenhilfsmittel kaum berührt, er ist ja nur eine detaillierte Fassung des numerischen Verfahrens. Es sei hier nur erwähnt, daß bei der Verwendung von Rechenautomaten die zu verarbeitenden Algorithmen so kompliziert werden können, daß als Ergänzung des Algorithmus das sogenannte Flußdiagramm aufgestellt werden muß.
Der Einsatz eines Rechenautomaten
15
Ohne nähere Erläuterung soll hier ein zu dem auf Seite 11 angeführten Algorithmus gehöriges Flußdiagramm abgebildet werden.
4. Abschnitt: Rechenanweisung. Die einzelnen Rechenanweisungen für einen Rechenautomaten heißen Befehle. Eine Folge von Befehlen nennt man ein Programm, seine Ausarbeitung Programmieren. Jedes Befehlswort enthält einen Operationsteil und einen Adressenteil. Der Operationsteil bestimmt, was zu tun ist, also z. B. „Addiere", „Multipliziere" usw. Der Adressenteil gibt an, in welcher Speicherzelle die Zahlen zu finden sind, mit denen gerechnet werden soll. Der Aufbau eines Befehls entspricht also recht genau den Rechenanweisungen unseres Formulars. So hat zum Beispiel die Operation in Zeile 3 unseres Beispiels, < 1 > + < 2 > , den Operationsteil -f- und die Adressen 1 und 2. Es gibt allerdings auch eine Reihe von Befehlen, für die keine entsprechenden Anweisungen auf dem Formular zu finden sind. Das sind z.B. alle Befehle, die die Eingabe und Ausgabe von Daten bewirken. 5. Abschnitt: Rechnung. In der elektronischen Rechenmaschine läuft die Rechnung nach Maßgabe des Programms mit großer Geschwindigkeit auto-
16
Einleitung Leitwerk
+
BefehlszähLregister
©
Befehlsregister
Steuerregister W o r t - Bed. Zn. art I I
I I
I I
Operat.Zeichen • C t L t Ü t [ TF E N R A S
Rechenwerk L R N
AI
Schnell-Speicher
ft
0 Null 1 Zwei 2
Vorzeichentest
3
Rechter Akkumul
_ _ _ J
4 Linker Akkumul
©
5
Rückkehradresse
6
Operanden-Reg.
7
ohne
;
festgelegte Funktion
15
I
Trommel-Speicher _-t
Puffer-Speicher Eingabe
Abtaster
j
s
Adressen | t
©
Kurze Beschreibung der Z 22
17
matisch ab. Jedoch hat der Mathematiker auch hier die Möglichkeit, den Rechengang zu beobachten und zu lenken. Denn es ist möglich, laufend Teilergebnisse ausdrucken oder direkt anzeigen zu lassen und den Programmablauf durch Einstellungen am Bedienungspult zu beeinflussen. 1.3 Kurze Beschreibung der Z 22 Die Z 22 ist eine mittelschnelle Universalrechenmaschine mit gespeichertem Programm. Auf Seite 16 ist ein grobes Blockschaltbild angegeben, aus dem die Benennung der Hauptteile und ihre informationsmäßige Verknüpfung zu ersehen ist. 1.31 Die technische Realisierung der Hauptteile der Z 22
Der Speicher besteht aus zwei Einheiten, einer Magnettrommel (als Hauptspeicher) und einer Ferritkern-Matrix (als Schnellspeicher).
Die Magnettrommel ist ein rotierender Zylinder von etwa 18 cm Durchmesser und 30 cm Länge, auf deren magnetisierbarer Oberfläche die Informationen in einer magnetischen Impulsnotierung untergebracht sind. Auf jedem Umfang stehen 32 Wörter (das sind Zahlen oder Befehle). Die magnetischen Notierungen längs eines Umfanges werden von einem Magnetkopf geschrieben bzw. gelesen. Den zu einem Kopf gehörigen Trommelbereich nennt man eine Spur. In unserem Beispiel sind auf der Trommel 256 Spuren, also insgesamt 32 • 256 = 8192 Wörter untergebracht. Da die Trommel mit 50 U/sec rotiert, muß man im Mittel 5 ms warten, bis ein bestimmtes Wort am Kopf der dazugehörigen Spur erscheint und damit zur Verarbeitung erreichbar ist. Der Schnellspeicher besteht aus einer sogenannten Ferritkern-Matrix. Das ist eine matrixartige Anordnung von Bingen aus magnetisierbarem Material, bei denen zwei Remanenzzustände, nämlich die beiden gegenläufig ringförmigen Magnetisierungen stabil sind. Sie werden zur Speicherung 2 Güntsch, Digitale Bechenautomaten
18
Einleitung
von binären Informationen (also etwa der Ziffern 0 und 1) verwendet. Der Kernspeicher enthält 15 Zellen mit sehr geringer Zugriffszeit. Er dient als schneller Zwischenspeicher für oft benutzte Wörter und verhindert so, daß die große Zugriffszeit der Trommel den Programmablauf unvernünftig lange aufhält.
Die Informationsdarstellung ist, wie wir gesehen haben, im Speicher binär. Das gilt für die gesamten Rechenmaschinen. Informationen, die nicht wie die einzelnen Stellen einer Dualzahl ohnehin binär sind, müssen beispielsweise in der auf Seite 19 angegebenen Form nach einem bestimmten Code als Kombination von binären Angaben aufgebaut werden. Das Leitwerk enthält im wesentlichen die folgenden drei Register: Das Befehlsregister (BR), das Befehlszählregister (BZ) und das Steuerregister (SR). Jedes dieser Register kann einen Befehl aufnehmen. Die Befehle werden aus dem Speicher über den Schalter E in das Leitwerk transportiert und im Befehlsregister abgelegt. Zur Ausführung wird der Befehl in das Steuerregister übernommen. Im Steuerregister werden die verschiedenen zur Ausführung des Befehls benötigten Steuersignale erzeugt. Insbesondere werden die Schalter E, C, N usw. gestellt und dem Speicher die Adressen der durch den Befehl betroffenen Speicherzellen mitgeteilt. Auf der anderen Seite werden aus dem Rechenwerk Angaben (insbesondere Vorzeichen) über die in den Schnell-
Kurze Beschreibung der Z 22
Informationsart Dualzahl Dezimalzahlen
Buchstaben
19
Beispiel für eine binäre Notierung 10110 0 1 2 3 4 5 6 7 8 9 A B C D
Binärcode
Fernschreib-Code
10110 0000 0001 0010 0011 0100 0101 0110 Olli 1000 1001 11000 10011 OHIO 01101
speichern 2, 3 und 4 stehenden Zahlen nach SR übertragen. Diese Angaben bedingen die Ausführung des Befehls in einer Weise, die im Befehlscode näher beschrieben ist. Mit Hilfe eines besonderen Befehlswortes, das ständig zwischen dem Befehlsregister und dem Befehlszählregister kreist, wird bewirkt, daß die Befehle in der Reihenfolge, in der sie im Speicher stehen, ins Leitwerk abgerufen werden. Dazu ist ein ständiges Fortschalten der Adresse notwendig. Dies wird von dem zwischen B R und BZ liegenden Addierwerk übernommen. Eine besondere Leitung führt über den Schalter F von BZ in den Schnellspeicher 5, den Rückkehradressenspeicher. Dies dient dazu, bei Programmverzweigungen eine einfache Rückkehr zur Verzweigungsstelle zu ermöglichen. Bis auf die Übernahme der Befehle von B R nach SR erfolgen alle Transporte in Serie. Das heißt, die binären Elemente eines Wortes werden zeitlich nacheinander auf einem Kanal übertragen. 2*
20
Einleitung
Das Rechenwerk besteht aus dem Addierwerk und einigen Registern, die mit den Schnellspeicherzellen 2, 3 . . . 6 identisch sind. Dem rechten Eingang des Addierwerks (A, I) können über den Schalter A Wörter aus dem Speicher und über den Schalter C aus dem Befehlsregister zugeführt werden. Dieser Zugang kann über das Komplementwerk S negiert werden, so daß im Addierwerk bei Bedarf an Stelle der Addition eine Subtraktion ausgeführt wird. Der linke Zugang des Addierwerks ist im allgemeinen mit dem Akkumulator (Schnellspeicher Nr. 4) verbunden. Beim Transport vom Akkumulator zum Addierwerk kann jedes Wort nach links bzw. rechts verschoben oder gelöscht werden (L, R, N). Der Summenausgang des Addierwerks führt immer zum Akkumulator. Ein weiterer Weg führt vom Akkumulator über den Schalter U zum Speicher. Die besonderen Funktionen der Schnellspeicher 2, 3, 5 und 6 werden weiter unten bei der Erläuterung des Befehlscodes deutlich. Zur Eingabe dient ein Lochstreifenabtäster, der seine Informationen über einen kleinen Pufferspeicher und von da aus über das Addierwerk in den Akkumulator abliefert. Die Ausgabe erfolgt aus dem Akkumulator über den Schalter U und den Pufferspeicher auf eine Fernschreibmaschine, an die bei Bedarf ein Lochstreifenstanzer angeschlossen werden kann. 1.82 Die Zahlendarstellung im Inneren der Z 22
Innerhalb elektronischer Digitalrechner werden vor allem das Dualsystem (Basis B — 2) und das Dezimalsystem (B = 10), bei dem jedoch die einzelnen Dezimalziffern binär verschlüsselt sind, verwendet. In der Z 22 wird das Dualsystem benutzt. Die einfachste Zahlendarstellung ergibt sich, wenn jeder Ziffer ein fester Stellenwert zugeordnet wird. Man nennt diese Anordnung eine FestkommaDarstellung ( F K ) . Für die Z 22 gilt in diesem Fall: Stelle Stellenwert
1 2
1
2 2°
3 2-
4 1
38
2~
2
2- 3 6
Das Komma liegt also zwischen der zweiten und dritten Stelle. Für die Größe der dargestellten Zahlen z gilt folgende Beschränkung: |*| < 1 . Da in den verschiedenen von der Maschine zu lösenden mathematischen Problemen Zahlen der verschiedensten Größenordnung vorkommen, fällt
Kurze Beschreibung der Z 22
21
dem programmierenden Mathematiker die unangenehme Aufgabe zu, alle Größen so zu normieren, daß sie während des gesamten Rechenganges in der gleichen vorgeschriebenen Größenordnung bleiben. Diese Aufgabe ist nicht nur mühsam und durch Irrtümer gefährdet, sondern setzt zu ihrer vernünftigen Bewältigung auch im voraus gewisse Kenntnisse über das Verhalten von Größen voraus, die erst berechnet werden sollen. Es müssen also erst geeignete Abschätzungen gemacht werden, die nicht immer einfach durchzuführen sind. Um den Programmierer dieser Normierungsarbeit zu entheben, fügt man die Zahlendarstellung im gleitenden Komma (OK) ein. Man benutzt im allgemeinen eine sogenannte halb-logarithmische Notierung; das heißt: Jede Zahl wird in der Maschine als Zahlenpaar (z, z) dargestellt, z und z haben nun festes Komma und werden Mantisse und Exponent genannt. Mit Hilfe von z und z können die Zahlen als z = z B1 oder in einer ähnlichen Form dargestellt werden. In der Z 22 gilt (mit B = 2) z = z-2?-64. Dabei werden für die Mantisse 31 und für den Exponenten 7 Stellen nach folgendem Schema verwendet: Stelle Stellenwert
1 21
2 2°
3 4 1 2-
31 32 33 34 . . . 38 . . . 2- 2 9 2« 2 6 2 4 . . . 2°
Mantisse z
Exponent z
Die Verschiebung des Exponenten um 64 hat den Zweck, negative z zu vermeiden. Es soll stets gelten 0 ^ z < 27. Beim Rechnen in gleitendem Komma ergeben sich für die einzelnen Rechenoperationen folgende Besonderheiten: Addition
(Subtraktion)
Sollen zwei halblogarithmisch dargestellte Zahlen addiert werden, so müssen zuvor die Exponenten angeglichen werden: Zj =
• Bl1
z2 = z2- B2" Angenommen, es ist z1
z2, dann kann z2 auch in der Form
z2 = z 2 - B*1 mit «2 = £ - ( Z l ~ Z i , 2 2
Einleitung
22
geschrieben werden, und es wird z1 + z2 = (zt + z'2) Bz\ Multiplikation
und
Division
Bei der Multiplikation und Division können die Mantissen direkt verarbeitet werden. Das Resultat erhält dann die Summe bzw. die Differenz der Exponenten als Exponent zugeordnet. Zl * z1:z2
+ = Ch * Zi 1 = (2X: z2) B ~ -.
Normalisierung Lassen wir eine Reihe von Operationen im gleitenden Komma ablaufen, so werden bei der Addition und Subtraktion durch die Exponentenangleichung und durch die Multiplikation von Zahlen, die kleiner als Eins sind, die von Null verschiedenen Ziffern nach rechts aus dem Zahlenbereich der Mantisse hinauswandern. Es ist daher naheliegend, nach jeder Operation die Zahlen in bestimmter Weise zu normieren. Eine einfache Normalisierungsmethode besteht darin, daß grundsätzlich nach jeder Operation die Mantisse des Ergebnisses ganz nach links geschoben und der Exponent entsprechend korrigiert wird. Dieses Verfahren wird im folgenden bei der Z 22 verwendet. Wir wollen also verabreden 1/2 ^ | z | < 1. Diese Normierung läßt die Tatsache außer acht, daß laufend willkürliche Ziffern nach links gezogen werden, die keinen rechnerischen Wert besitzen. Man darf sich also über die Anzahl der gültigen Stellen eines Ergebnisses nicht täuschen lassen. Es sind daher auch andere Normungsverfahren üblich, die das Nachziehen ungültiger Stellen mehr oder weniger vermeiden ([4]). Es bleibt noch die Frage zu erörtern, wie negative. Zahlen dargestellt werden sollen. Das einfachste ist, die auch sonst gebräuchliche Darstellung durch Betrag und Vorzeichen zu benutzen. Dies bringt aber gewisse Schwierigkeiten beim Addiervorgang mit sich, so daß in vielen Rechenmaschinen sogenannte Komplementdarstellungen benutzt werden. Neben den hier nicht näher erläuterten sogenannten (-B-1)-Komplementen interessiert vor allem das B-Komplement.
Kurze Beschreibung der Z 22
23
Wir wollen annehmen, daß unsere Zahlen z folgendermaßen begrenzt sind: — Bn
S.- ASn, Sn < 4 > — < » > -> 4 Subtraktion in festem Komma NASn, NSn 4 — ISn & (—4 C.- CAt CBt
est CNSt CIt
eist
II
ARn SRn
L: ALn SLn
+
t t
—
t
-»4 ->4
-> 4 4 & t ->4 < 4 > & (—t) 4
—
t
2" 1 < 4 > - f 2- 1 < 4 > — ^
4 Multiplikation 4 mit 2- 1 in FK
2 < 4 > + 0 > -> 4 2 < 4 > — ->4 2.224
Befehle mit C als Zusatzzeichen benutzen den Adressenteil als Operanden In diesem Falle liegt t in dem Bereich 0 ^ t < 2 13
Multiplikation mit 2 in FK
j j u n d £, schließen sich gegenseitig aus!
Bedingungszeichen
Bedingungszeichen müssen als spezielle Zusatzzeichen vor den anderen Operationszeichen eines Befehls stehen. 1)
Soll heißen: An Stelle von NA kann auch B geschrieben werden; entsprechendes gilt für J\ S usw.
29
Das Flußdiagramm
Px Qx PPx QQx
Die Befehle x werden nur ausgeführt, wenn die Bedingungen
2.225
Stop
^ < S;
3
Befehl 2 Befehl 3
4 5
Befehl 4 Befehl 5
Befehl 5 ist ein bedingter Sprung.
6 7
Befehl 6 Befehl 7
Befehl 7 ist ein unbedingter Sprung.
8
Wort 8||
II
Es wird von Befehl 5 unter bestimmten Voraussetzungen auf Befehl 3 gesprungen.
Diese Position (8) wird während des Programm ablaufes nicht erreicht. Sie dient nur als Aufbewahrungsort für das Wort Nr. 8. 2.4 Das Flußdiagramm
Die von Burks, Goldstine, von Neumann [5] eingeführten Fluß- (oder Struktur-)Diagramme dienen dazu, den Ablauf eines Programmes graphisch darzustellen. Zu diesem Zweck wird jeder Befehlsfolge eine Linie in der Zeichenebene zugeordnet. In diesen Linien werden „Kästchen" eingefügt,
30
Über die Notierung von Programmen
die bestimmten Programmelementen entsprechen. Im allgemeinen genügt es, die folgenden Elemente für den Aufbau eines Flußdiagrammes zu benutzen: Rechenvorgänge
^ R(a.b)-
Dieser Kasten enthält im allgemeinen eine Rechenvorschrift und bedeutet, daß dem Programmteil ... n2 die Ausführung dieser Rechenvorschrift obliegt. Verzweigungen
"1 "2 -»f Bedingung erfüllt (?)
^ Nein
In diesem Kasten ist eine Bedingung angegeben. Je nachdem, ob diese Bedingung erfüllt ist oder nicht, wird der eine (Ja) oder der andere (Nein) Ausgang durchlaufen. Anschlußstellen
n-|
n;
— ® Diese Anschlußstellen kennzeichnen Eingänge und Ausgänge von Flußdiagrammen. Die Benennung (A, B usw.) der Anschlußstellen erfolgt vor allem mit Rücksicht darauf, daß bei der Aufteilung großer Flußdiagramme in kleinere Diagramme an den Trennstellen jeweils ein Eingang und ein Ausgang eingeführt wird, dessen Bezeichnungen übereinstimmen:
Stellweichen
®r "0
n
3
Lineare Programme
31
Stellweichen sind Mehrfachverzweigungen mit Voreinstellung. In einem „Stellwerk" (s. u.) wird festgelegt, welche der möglichen Programmfolgen (1->1,1; 1—> 1,2; l-»-l,3) durchlaufen werden soll. Stellwerke
n
n
1
2
12
Stellwerke dienen dazu, eine Voreinstellung der Stellweiche vorzunehmen. Wird das hier gezeigte Stellwerk durchlaufen und anschließend die oben gezeigte Stellweiche erreicht, so durchläuft das Programm den Zweig 1->1,2. Feststellungen
f (a.b)- 7
Feststellungen werden an Programmwegen seitlich angebracht, Sie dienen als Erläuterung zum Programmablauf.
3 Lineare und zyklische Programme Zur Kennzeichnung der Struktur eines Programmteiles ist es wichtig, festzustellen, ob das Programm linear oder zyklisch ist. Die zyklischen Programme haben ein Flußdiagramm mit mehrfachem (topologischen) Zusammenhang, während die Flußdiagramme der linearen Programme einen einfachen Zusammenhang besitzen. Es sind gerade die zyklischen Programme charakteristisch für eine Automatisierung der Rechentechnik, wie ja überhaupt die Organisation der vielfachen Benutzung gleicher Elemente das wesentliche einer jeden Automatisierung ausmacht. 3.1 Lineare Programme Wir wollen hier folgendes Beispiel eines linearen unverzweigten Programmes angeben:
Lineare und zyklische Programme
32
Skalarprodukt zweier Vektoren (alt a2, a3) • (bv bz, b3) = c. a) Algorithmische
Schreibweise: alb1 Cy a2b2 ->rc1 «3Ö3
b)
+ C2
c2 C
Flußdiagramm
c) Speicherauf teilung : Nummer
Anfangs
1000 •
Programm
1018 2000 1 2 3 4 5 6
«2 «3 h b3 —
Später
Darstellung
Lineare Programme
d)
33
Programm: Befehl
Nummer 1000 1 2 3 4 5 6 7 8 9 1010 11 12 13 14 15 16 17 1018
Op.
Adr.
B T B X T B T B X B
2000 6 2003
T B T B X B
2006 2002 6 2005
T
2006
Erläuterungen
a1-b1
-> 2006
2006 2001 6 2004
a2b2 -f Cj
c 2 -> 2006
2006
+
o3ö3 + c 2 « * c - > 2 0 0 6
2006
+
Übung:
Taylorentvrìcklung von e x
e x = 1 +x+—
a) Algorithmische Schreibweise: x -f-1 x2 ~2~ + c i
s.
cx
x + 1 * o,
b)
3
+
Güntach, Digitale Rechenautomaten
Flußdiagramm:
v2 , 7
*
34
Lineare und zyklische Programme
c) Speicheraufteilung : Nummer
Anfangs
Später
Darst.
1000 • Programm 1012 2000 2001 2002 2003
d)
X
cv
e*
OK
1 2
Programm: Befehl
Nummer 1000 1 2 3 4 5 6 7 8 9 1010 11 1012
Erläuterungen
Op.
Adr.
B T B
2000 6 2002
+
T B U X B
2003
B
2001
+
T
x + 1 ^q-^2001
2001 2000 6
2001
x2 — + cx ¿à
ex ->• 2001
.
Ü b u n g : Berechnung eines Polynoms mit Hilfe des Hommerschen Schemas P(x) = a0 -j-a1x -f-a2x2 +®3a;3 x a
= «o + ( i
=
Lineare Programme a) Algorithmische
35
Schreibweise:
xaz
P2
xP2 + a1 =4- Pj xP1 +a0
^
P(x)
b)
Flußdiagramm
c) Speicheraufteilung : Nummer
Anfangsinhalt
Später
Darstell.
1000 Programm
•
1014 2000 2001 2002 2003 2004 d)
a0 «i a2 a3
GK P(x)
X
Programm: Nummer 1000 1 2 3 4 5 3»
Befehl Op. B T B X B
+
Adr. 2003 6 2004 2002
Erläuterungen
xa3 + a 2
P 2 - > 4,6
36
Lineare und zyklische Programme
d) Programm
(Fortsetzung)
Befehl
Nummer 1006 7 8 9 1010 11 12 13 1014
B X B
2004
B X B
2004
T
2004
2001
+
2000
+
Übung: Berechnung einer Determinante « i i «12 «13
D =
«21 «22 «23 «31 «32 «33
a) Algorithmische
Formulierung:
«11 «22 «33 «12 «23 «31
£>2
«13 «21 «32 +
-°3
«13 «22 «31 — A i
— Dt
«12 «21 «33 —
—A>
— («11 «23 «32 —
b)
Erläuterungen
Adr.
Op.
Flußdiagramm:
xP2 +a1
xPl
+a
->4,6
0
-=*P(a;)->-2004
Lineare Programme
37
c) Speicheraufteilung : Nummer
Anfangsinhalt
Später
Darstellung
1000 Programm 1052 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009
«11 «12 «13 «21 «22
GK
«23 «31 «32 «33
D„D
d) Programm: Nummer 1000 1 2 3 4 5 6 7 8 9 1010 11 12 13 14 15
Befehl Op.
Adr.
B T B X B X T B T B X B X B
2000 6 2004
+
T
2008
Erläuterungen
«11 «22 «33
-Di
2009
2009 2001 6 2005 2006 2009 2009
• «12 «23 «3i +-D X
-D2-ä-2009
38
Lineare und zyklische Programme
d) Programm (Fortsetzung) Nummer 1016
1024 1025 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 1052
Befehl Op.
Adr.
B
2002
T B T B X B X B
Erläuterungen
«13 «21 «32 + D»
D
3
«13 «22 «31 — D 3
—Al
2009
2009 2002 6 2004 2006
2009
2009
—
T B T B X B X B
+
T B T B X B X B
+
M T
2009 2001 6 2003 2008
' «12«21 «33 + ( — A ) => —D 5 H* 2009
2009 2009 2000 6 2005 2007 2009
2009
— K l «23 «32 + (—¿>5)] -+D-* 2009
Zyklische Programme
39
Ü b u n g : Berechnung eines bestimmten Integrals mit Hilfe der Simpsonschen Regel ? l I = J x2f(x)dx 0 f(x) ist numerisch gegeben für x = 0,1; 0,2; . . . 0,9; 1. 1
=
"¿{
/(1) + 4
t ° > l i f W + ° ' 3 2 / ( ° ' 3 ) + ••• +0,9 2 /(0,9)] +
+ 2 [0,2 2 /(0,2) +0,4 2 /(0,4) + . . . + 0 , 8 2 / ( 0 , 8 ) ] | 3.2 Zyklische Programme (Literatur [5], [6], [7]) Programmtechnisch lassen sich die zyklischen Programme in zwei Gruppen aufteilen: 1. Zyklische Programme mit einer festen Anzahl von Durchläufen Das sind Programme, bei denen die Anzahl der Durchlaufe spätestens in dem Augenblick feststeht, in dem die Abwicklung dieser Programme beginnt. 2. Zyklische Programme mit einer variablen Anzahl von Durchläufen Das sind Programme, bei denen die Anzahl der Durchläufe von Rechengroßen abhängt, die erst im Verlaufe der Abwicklung der betreffenden Programme gewonnen werden. Man kann die zyklischen Programme auch nach einem anderen Gesichtspunkt ordnen. Man erhält dann folgende Gruppierung: 1'.
Induktionszyklen Das sind Programme, in denen bei jedem Durchlauf eine neue Gruppe von Variablen nach der gleichen Rechenvorschrift verarbeitet wird. Das verlangt bei jedem Durchlauf die Ausführung gewisser systematischer Adressenänderungen. 2'.
Iterationszyklen Das sind Programme, in denen bei jedem Durchlauf die gleichen Variablen nach einer bestimmten Rechenvorschrift verarbeitet werden. 3.21 Zyklische Programme mit einer festen Anzahl von Durchlaufen
Die algorithmische Formulierung eines zyklischen Rechenprozesses mit einer festen Anzahl von Durchläufen erfordert die Einführung einer besonderen Zählvariablen. Es ist üblich, zu diesem Zweck Indizes zu benutzen.
Lineare und zyklische Programme
40 Beispiel:
Newtonsche Iteration 1. Ordnung für x = a1' mit 5 Iterationsschritten f(x) = x* — a - 0 '"- 1 a) Algorithmische Für i = 0:
Für i = 5 :
-
/'(*,-1)
g
^
_
1
-
2
L
Zt-J
Formulierung: A x( (Der Anfangswert A sei explizit bekannt)
X(
a
6) Flußdiagramm:
Das Flußdiagramm muß nun nicht nur über die arithmetischen Vorgänge, sondern auch über das Zählen Auskunft geben. Bei der Aufstellung des eigentlichen Programmes muß neben dem arithmetischen Teil die Zählung und Verzweigung berücksichtigt werden. Es
Zyklische Programme
41
ist am einfachsten, der Indexvariablen einen gesonderten Speicherplatz zuzuordnen und die Verzweigung mit einem durch den Wert dieser Indexvariablen bedingten Sprung zu bewerkstelligen. c) Speicheraufteilung: Nummer
Anfangsinhalt
Später
Darstellung
x{; a1''
GK GK GK FK
1000 Programm
•
1016 A a 2
2000 2001 2002 2 d)
i'
—
Programm: Befehl
Nummer 1000 1 1015 —> 2 3 4 5 6 7 8 9 1010 11 12 13 14 15 1011
1016
Op.
Adr.
CNS T B T B
4 2 2001 6 2000
Erläuterungen
: B
+
2002
T PE
2000 1016
B AC T E
2 1 2 1002
i')->2
1 / \ 2 ( ^ - i + ^ J - * ' -
2000
B
— (5'—
1
i
5
2 0 0 0
Sprung auf Programmende
. j'_|_i'
2
Schluß
42
Lineare und zyklische Programme
Das mehrfache Durchlaufen einer Schleife muß nicht notwendig nach dem Schema erfolgen, das dem Flußdiagramm unseres Beispiels zugrunde gelegt wurde. Wir wollen die verschiedenen Möglichkeiten systematisch diskutieren [8]. Jede Schleife hat grundsätzlich folgende Gestalt:
Bei z liegt der bedingte Sprung, der das Verlassen der Schleife ermöglicht. a ist der erste mehrfach durchlaufene Befehl. Es ergeben sich zwei interessante Spezialfälle für die gegenseitige Lage von a und z: 1. a — z
Diese Anordnung ermöglicht es, die Schleife zu überspringen. 2.
a = z
+1
Für den Programmierer ergeben sich noch andere Fallunterscheidungen. Denn es ist auch bei vorgegeben gegenseitiger Lage von a und z nicht gleichgültig, wo a und z innerhalb des zyklischen Programmstückes liegen. Es ergeben sich die folgenden Fälle:
43
Zyklische Programme
zu (1)
©
©
©
E a- 2
PE
a= z
a=z —
zu (2)
©
© fc
p
PE
/ / PE / / / E
PE
44
Allgemeine
Lineare und zyklische Programme
Lage:
©
®
®
©
n Im Programm muß jeweils eine bestimmte Mindestzahl von Sprungbefehlen enthalten sein. Wir nennen sie m. Wird die Schleife n mal durchlaufen, so muß insgesamt eine von n abhängige Mindestanzahl von Sprungbefehlen durchlaufen werden. Wir nennen diese Zahl M (n). In der folgenden Tabelle sind m und M für die interessantesten Fälle, nämlich (1) . . . ( 5 ) aufgeführt: Fall
m
M(n)
1 2 3
2 2 3
n +2 2n + 1 2n + 2
4
1
5
3
n+
1
2n + 1
Man sieht, daß der Fall (4) der günstigste ist. Daher wollen wir unser Beispiel (Fall (7)) abändern:
Zyklische Programme
Übung: b')
Flußdiagramm:
46
Lineare und zyklische Programme
d') Programm: Befehl
Nummer 1000 1 1014 -»• 2 3 4 5 6 7 8 9 1010 11 12 13 14
Op.
Adr.
CNS T B T B
5 2 2001 6 2000
B
2000
+
B
2002
T B AC T QE
2000 2 1 2 1002
Erläuterungen
1 1 ^i,
6' —
• i' + 1' s-i'^
i'^2
2
i rg 5 ^ Sprung nach 1002
1015 Sowohl bei Zyklen mit fester wie mit variabler Durchlaufzahl gibt es Induktionen und Iterationen. Unser Beispiel enthält einen Iterationszyklus. Denn das iterierte xi wird immer wieder xi_1 genannt und immer an der gleichen Stelle ({a^} = 2000) gespeichert, so daß die Rechenvorschrift immer auf eine in der gleichen Speicherzelle stehende Variable angewendet wird. Wir wollen nun ein einfaches Beispiel für einen induktiven Zyklus vorstellen: Beispiel: Skalarprodukt zweier Vektoren (alt a2, ... a10) • (blt Z>2, . . . 610) = c a) Algorithmische Für Für Für
Formulierung: i = 1: 0 c^! i = 1 (1) 10: a^ + ci_1 i = 10: c( c
ct
Zyklische Programme
b) Flußdiagramm:
Speicheraufteilung : Nummer
Anfangsinhalt
1000 Programm 1022
Später
Darstellung
48
Lineare und zyklische Programme
c) Speieheraufteilung
(Fortsetzung)
Nummer
Anfangsinhalt
2000 2001
®i a2
2009 2010 2011
«10
Später
Darstellung
GK
h
2019 2020 2021 2
b
10 cu
—
c
B 2000
Befehl
ï
FK
d) Programm: Befehl
Nummer 1000 1 2 3 4 5 6 1022->1007 8 9 1010 11 12 13
Op. CN8 T B U AG T T
[
2 T
[
2
10 2 2021 1007 10 1009 2020 0 ] 6
—(11' —
i') ->
1
B {«,}-> 1007 B {&- 1009 Sprung nach 1007
Wir sehen, daß bei induktiven Zyklen der Übergang von i auf ¿ + 1 nicht nur einen Zählschritt, sondern auch Adressenänderungen bei all den Befehlen erfordert, die sich auf eine mit i indizierte Variable beziehen. Damit diese Adressenänderung einfach vonstatten gehen kann, müssen diese Variablen im Speicher zweckmäßig angeordnet werden. Am besten ist es, wenn sie äquidistant gespeichert werden: {«l-l) =
{« 6 7 8 9 1010 11 12 13 14 15 16 17 18 1019
Befehl Op.
Adr.
B CS
2021 10 1008 10 1006 2020 0 ] 6 1 ]
u
CS T
T [ 2
T [ z X
Erläuterungen
B {6,} -> 1008 1 -s-i
B {«,} 0 -*• Cj_ 1
2020
B{at) B{b 0 1
—1 ^¿{a^} Sprung nach 1005
Pt «*P(a;)H>2011
3.22 Zyklische Programme mit variabler Anzahl von Durchlaufen
Ist die Zahl der Durchlaufe nicht vorher bekannt, so können wir das Ende des Zyklus nicht durch einen Zählvorgang ermitteln. Es müssen dann andere Kriterien angewendet werden. Typische Beispiele für Zyklen mit variabler Durchlaufzahl sind Iterationen, bei denen die Genauigkeit der Näherung das Abbrechen des zyklischen Verfahrens bewirkt oder das Durchsuchen von Listen. Hier entscheidet das Auffinden einer Listenposition, ob der Zyklus unterbrochen wird oder nicht. Beispiel:
Newtonsche Iteration für x = a' 1' i+i
x
= w ( xi + —\ > Anfangswert A; Genauigkeitsschranke s
Zyklische Programme
a) Algorithmische
53
Schreibweise:
Für i = 0:
A =#• X{
Für i = 0 (1) n:
£2
Wenn.: |
+ x
— x( \ n) eingesetzt.
b)
Flußdiagramm:
54
Lineare und zyklische Programme
c) Speicheraufteilung: Nummer
Anfangsinhalt
Später
Darstellung
a1'' Xi
GK GK GK GK GK
1000 Programm
•
1015 a A 2
2000 2001 2002 2003 2004
5 xi
—
+l
d) Programm: Befehl
Nummer 1017 -> 1000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Op.
Adr.
B T B
2000 6 2001
B
2001
+ B
2002
T B
2004 2001
Erläuterungen
1 /
a\
—
QQM B
2003
1 Xi + 1~ xi 1 Sprung auf den Schluß
—
QQE B T E
2004 2001 1000
i -f- 1 xi
+1
i xi
2001
Symbolische Adressen
55
Der Befehl QQM bewirkt folgendes: Der Inhalt des Akkumulators wird negiert, wenn der Inhalt des Akkumulators negativ ist. Sonst bleibt er unverändert. Das heißt, es wird der Betrag des Akkumulatorinhaltes gebildet.
4 Symbolische Adressen Bei der Herstellung von Programmen sind wir bislang vor allem zwei Unzulänglichkeiten begegnet: Es kommt, insbesondere bei zyklischen Programmen, oft vor, daß sich bestimmte Befehle auf Programmteile beziehen, die noch gar nicht vorliegen. Das bedeutet, daß für diese Befehle keine Adressen angegeben werden können, bis die zugehörigen Programmteile fertiggestellt sind. Eine andere lästige Angelegenheit ist das nachträgliche Einschieben von Befehlen in „fertige" Programme bei 1-Adreß-Maschinen. Ein solcher Einschub hat im allgemeinen zur Folge, daß eine große Anzahl von Adressen geändert werden muß — eine langweilige Arbeit, die häufig zu Irrtümern führt. Es gibt nun eine einfache Möglichkeit, dieser beiden Schwierigkeiten Herr zu werden, nämlich die Einführung sogenannter symbolischer Adressen. Das heißt, es werden für die einzelnen Wörter des Programms nicht laufende Nummern als Adressen links daneben geschrieben, sondern die Wörter werden bei Bedarf mit willkürlichen Adressensymbolen vorläufig gekennzeichnet. Ist das ganze Programm fertig, so werden die Adressensymbole durch die richtigen fortlaufenden Adressen ersetzt [9]. Wir wollen im folgenden eingeklammerte, positive, ganze Dezimalzahlen als Adressensymbole benutzen. Es sind jedoch auch andere Zeichen, wie Punkte (vgl. etwa [10] und [11]) und Sterne (vgl. [12]) üblich. Beispiel: Durchsuchen einer Funktionstafel mit anschließender linearer Interpolation. Die Tafel enthalte nur positive, monoton steigende Argumente x t (i = 1, 2, 3 . . . ) . Es sei außerdem sichergestellt, daß das vorliegende Argument in den Tafelbereich fällt, daß es also der Umgleichung M i n ^ j ) < x l i Max(a;,) genügt. a) Algorithmische
Form:
Für i = 0(1) w: Für i = n:
W e n n a ; < i j + 1: yi¡+ V^hUZli.
i (
x
y
Symbolische Adressen
56
b)
Flußdiagramm:
-
i+wi Xj+1*n
yu-f -yj , yi + X- M— — -X|
c)
. ,
Speicheraufteilung: Nummer
Anfangsinhalt
Später
Darstellung
1000 •
Programm
1042 2000 3000 3001 3002 3003 3004
X
y
x
o
Vo x
i
Vi X2
GK
57
Symbolische Adressen
Beim Programmieren brauchen wir nun nicht mehr „von vorn anzufangen", sondern wir können sinngemäß „von innen nach außen" programmieren. Wir müssen nur die einzelnen Programmteile anschließend in der (durch das Flußdiagramm festgelegten) Reihenfolge zusammenstellen. In den nachfolgenden Beispielen haben wir die einzelnen Programmteile links am Rande in der Reihenfolge, in der sie hergestellt wurden, durchnumeriert. Programm:
Nummer
(2)
(3)
Befehl Op.
Adr.
B T
(4) (3)
B AC T
(3) 2 (3)
[•B
T B
0] 6 2000
Erläuterungen J—
5 3000
•%+1-i,
B{xi
B U AC ü SC ü u sc u u
-M3)
+
*i +1
a;i + 1 — a ; < 0 ^ Sprung nach (2)
QQE
(2) (3) (5) 1 (6) 2 (7) (8) 1 (9) (10)
+ 1 }+2-*B{xi
+
x%
+i
Vi +1 • t
n
y
( 3 )
t+1
(i+1)
S( => e 1 ^- 2000
st T, i+1
+1
Mehrfach zyklische Programme
62
5 Mehrfach zyklische Programme Die Flußdiagramme der bislang betrachteten zyklischen Programme sind topologisch alle von folgendem Typ:
Wir wollen nun auch mehrere ineinander verschachtelte Zyklen zulassen, zum Beispiel die folgenden:
Die entsprechenden Programme nennen wir dann mehrfach zyklisch. Für die einzelnen Zyklen eines solchen mehrfach zyklischen Programmes gilt sinngemäß das bei (3.2) Gesagte. Beispiel: Matrizenmultiplikation
a) Algorithmische
(a^) (bj*) = (cik) n = 2 a>ipjic
Schreibweise:
Für i = l(l)ra: Für k = l ( l ) w : Für 7 = 1: O^cjr1 Für 7 = 1 (1)»: a^b j t + 4 " Für j = n: c{k ^ cik
1
4
Mehrfach zyklische Programme
(Ad
b)
(8M1 1 =* i 1-M 1 => k
Flußdiagramm: 8)
r (g>i
(2)
°U bjk + Sprung nach (18) J
1 =•*-»-(5) 0 - f ««_!-»• (9) B +
(2) (10)
{an}
Dito => B {au} -> (10)
(H) (15) (17) (11) (12) (15) (17) (12) (1) (1)
— (n + 1 ) '
^ + {4}
]
0
{*>}-> (12)
Mehrfach zyklische Programme d) Programm
(Fortsetzung)
Nummer
Befehl Adr. Op.
(2) (3)
[B T B X B
+
(6)
(8)
(10) (11)
T B AC T B AC T B AC U S QQE
Erläuterungen
0] 6 0
«« 4
(1)
Vi-i
SN PPE B S PPE
(1) (2) 1 (2) (3) 1 (3) (4) 1 (4) (5) (2) 4 (6) (7) (4) (2)
B T [B T B
(2) (8) 0] 6 (1)
[B
0]
[B S QQSN
69
0] 6 4
fc + 1 = k; B { 4 } + 1
k' + 1 ' :
B {4}-> (3)
(4)
k — i < 0 ^ Sprung nach (2) — (k—i) n —k^ 0
Sprung nach (6) Sprung nach (2)
ai,n
— (yk-1+ U>ii
«¿, „+1)
+l
4 - + 4,6 aH 4-1
•
14_1
- 4 1 -»-^->4
70
Mehrfach zyklische Programme
d) Programm
Nummer
(Fortsetzung)
"Befehl Op. A T B
(12)
[T B AC T B
(9) (9) 6 0] (2) 1
(?)
T
(3) (10)
A AC T B AC T B AC T BC T B AC T B 8 PPE SN QQE
r* -» ^ 1
x\
1
* H » } + 1 -*JB{a i +
(7) 2 (10) (H) 1
B {ait}+n+2 i -f-1
(2)
(10)
i
1 ~>Jc
(H) (12) 1 (12) 1 (4) (5) 1 (5) (7) (5) (13)
1>1 }
iai, *}
(2) (3)
S B
Erläuterungen
Adr.
-B
+1
1'
(4)
Ä
(11)
* + 1 ->• t-> (5)
n —i ^ 0
Sprung nach (13)
— s i _ 1 < 0 ^ Sprung nach (14)
(9) (14) Schluß
Die Versorgung von Unterprogrammen mit Parametern d) Programm
(Fortsetzung)
Befehl
Nummer
(4) (5) (7) (9)
(15) (16) (17)
Erläuterungen
Adr.
Op. (1)
71
[0] [0] [0] nt [0] 8192' {a u}
—Vt-i
k' i'
s¡
OK FK FK FK
„FK" FK OK OK
H )
6 Die Versorgung von Unterprogrammen mit Parametern (Literatur: [5], [6], [7]) Eine vernünftige Programmtechnik muß so eingerichtet sein, daß ein einmal hergestelltes Programm unter gleichen oder ähnlichen Bedingungen wieder verwendet werden kann. Soll etwa innerhalb eines Programm systems an mehreren Stellen der Sinus verschiedener Argumente berechnet werden, so kann man zwei Wege beschreiten: Entweder man notiert an jeder Stelle, an der sin x benötigt wird, ein entsprechendes Sinus-Programm, oder man notiert das Sinus-Programm nur einmal. Es wird dann jedesmal von dem übergeordneten Programm (oder Hauptprogramm) aufgerufen und durchgerechnet. Anschließend wird auf das Hauptprogramm zurückgesprungen. Im ersten Fall spricht man von offenen, im zweiten Fall dagegen von geschlossenen Unterprogrammen. Wird das Unterprogramm oft benutzt und ist es nicht sehr kurz, so ist die Ausführung als geschlossenes Unterprogramm sicher ökonomischer. Es ist daher nicht verwunderlich, daß der zu jeder Maschine gehörige Vorrat an Unterprogrammen — die Programm-Bibliothek — aus geschlossenen Unterprogrammen besteht. Wir wollen daher vorerst nur von geschlossenen Unterprogrammen sprechen und den Terminus geschlossen einfach fortlassen. Es gilt nun für uns, Techniken anzugeben, die es erlauben, ein einmal hergestelltes Programm auch in anderem Zusammenhang wieder zu verwenden. Die von der speziellen Form des übergeordneten Programmes unabhängige Verwendung von Unterprogrammen erfordert die Festlegung
Die Versorgung von Unterprogrammen mit Parametern
72
bestimmter Normen für den Verkehr zwischen dem übergeordneten Programm und dem Unterprogramm. Es müssen insbesondere Methoden für die Übernahme von Parametern in das Unterprogramm festgelegt werden. In unserem Beispiel müssen mindestens die beiden folgenden Parameter in das Sinus-Programm übernommen werden: Das Argument x und die Rücksprungadresse zum Hauptprogramm. I n diesem Kapitel wollen wir speziell die Übernahme von Parametern näher erörtern. 6.1 Unterprogramme, die nicht selbst weiteren Unterprogrammen übergeordnet sind Alle für die Abwicklung eines Unterprogramm.es von diesem benötigten Informationen bezeichnen wir als Parameter. Dabei ist es gleichgültig, ob diese Informationen den Charakter einer Adresse haben oder nicht. Die einfachste Art, Parameter in ein Unterprogramm einzuführen, ist, diese Parameter vor der Eingabe des Programmes in die Rechenmaschine in das Programm einzufügen. Beispiel: I n der Z 22 steht jedes Unterprogramm vor der Eingabe in die Maschine auf einem Lochstreifen. Die fehlenden Parameter können dann von Hand in den Streifen gestanzt werden. Haben wir etwa das Programm für die Matrizenmultiplikation von S. 62 vor uns, so müssen wir die Parameter in die Programmstellen (4), (6), (10), (11) und (12) einfügen. Diese simple Methode ist aber nur in Ausnahmefällen anwendbar. Sie verbietet sich im allgemeinen aus folgenden Gründen: a) Man möchte die Unterprogramme ohne zeitraubende und fehleranfällige Manipulationen aus der Bibliothek in die Maschine einführen. Es ist sogar erstrebenswert, die Unterprogramme vollautomatisch (d.h. programmiert) aus einem als Bibliothek fungierenden äußeren Großspeicher (Magnetbänder, Magnetplatten) zu übernehmen. b) Gewisse Parameter stehen bei der Eingabe des Unterprogramms in die Rechenmaschine überhaupt noch nicht zur Verfügung. Sie werden erst als Resultat von anderen Programmteilen geliefert.
Unterprogramme, die nicht selbst weiteren Unterprogrammen übergeordnet sind 73 c) Die Parameter müssen auf einfache Weise durch neue Parameter ersetzt werden können, damit das gleiche Programm bei verschiedenen Anwendungen verwendet werden kann. Wir interessieren uns also im folgenden nur für die von den Programmen selbst durchgeführte Versorgung der Unterprogramme mit Parametern. Das heißt, wir nehmen an, die Parameter stehen an bestimmten Stellen des übergeordneten Programmes und werden bei Bedarf in die Unterprogramme überführt. Wir wollen uns dabei nicht darum kümmern, ob sie vom Programmierer explizit oder von einem Programm an diese Stellen gebracht worden sind. Zur Vereinfachung der Überführung in die Unterprogramme wird man die Parameter möglichst in „Blöcken" zusammenfassen. Die Anfangsadressen dieser Blöcke sind dann logisch ausgezeichnete Parameter. Auch ein anderer Parameter, nämlich die Rücksprungsadresse zum übergeordneten Programm ist ausgezeichnet, weil jedes Unterprogramm mit diesem Parameter versehen werden muß. Es ergeben sich folgende Möglichkeiten für die Versorgung von Unterprogrammen : 1. Das Hauptprogramm bringt einzelne Parameter an die „richtigen" Stellen im Unterprogramm. 2. Das Unterprogramm holt sich einzelne Parameter aus dem Hauptprogramm und setzt sie an den richtigen Stellen ein. 3. Das Hauptprogramm bringt Parameterblöcke an Normstellen innerhalb des Unterprogramms. 4. Das Unterprogramm programm.
holt sich Parameterblöcke
aus dem
Haupt-
5. Das Hauptprogramm bringt einzelne Parameter an maschinenfest normierte Stellen. 6. Das Hauptprogramm bringt Parameterblöcke an maschinenfest normierte Stellen. Die einzelnen Möglichkeiten sind unterschiedlich brauchbar. So ist z . B . die erste kaum zu empfehlen, weil das Hauptprogramm viel zu viele Einzelheiten über das Unterprogramm wissen muß (wo werden die einzelnen Parameter innerhalb des Unterprogramms benötigt ?). Welche Möglichkeiten bzw. welche Kombinationen von Möglichkeiten tatsächlich am ge-
74
Die Versorgung von Unterprogrammen mit Parametern
eignetsten sind, hängt von Programm-Einzelheiten und von der technischen Ausrüstung der Maschine ab. Für 1-Adreß-Maschinen ohne Vorrichtungen für automatische Adressenänderungen (s. u.) ist beispielsweise folgende Lösung möglich: Hauptprogramm :
p-L
BCp+1
P
E (q)
p+ 1
1. Parameter
p+k
i-ter Parameter
Absprung in das Unterprogramm
Rücksprung vom Unterprogramm in das Hauptprogramm
(r)^p+k+1
Unterprogramm:
00
[E 0]
Rücksprung in das Hauptprogramm
Es wird verabredet, daß unmittelbar vor dem Absprung zum Unterprogramm ein Befehl die Anfangsadresse des Parameterblocks in das Rechenwerk bringt. Die Rücksprungstelle folgt unmittelbar auf den letzten Parameter des Blockes. Im allgemeinen wird der Block selbst direkt hinter
Unterprogramme, die nicht selbst weiteren Unterprogrammen übergeordnet sind 75 der Absprungstelle stehen. Da dem Unterprogramm die Blocklänge k entweder bekannt ist oder als ein besonderer Parameter mitgeteilt wird, kann es aus dem Blockanfang auf die Rücksprungadresse schließen. Die beiden ausgezeichneten Parameter reduzieren sich, falls k beim Programmieren bekannt ist, auf einen. Dieser wird vom Hauptprogramm an einen maschinenfesten Ort, nämlich in das Rechenwerk, gebracht. Wir haben also bezüglich k Fall (5) vor uns. Für die Behandlung der übrigen Parameter stehen uns noch alle Möglichkeiten offen. Wir wollen zunächst ein Beispiel für Fall (4) ausführen. Beispiel: Unterprogramm „Hornersches
Schema" P{x)
=J i =
0
Hauptprogramm:
p - l
BOp+1
V
E(q)
p + 1
n
1. Parameter
p+2
X
2. Parameter
an
3. Parameter
p+
3
FK
GK
. p+n+
3
fc-ter Parameter
a0
(fc = n -j- 3)
Rücksprungstelle ( < 4 > =
p -+- n + 4 •
P{x); GK)
76
Die Versorgung von Unterprogrammen mit Paramete
Flußdiagramm: Hauptprogramm
Unterprogramm .
k,n, Rücksprung einsetzen 2
0
©
Nein
P,
P(x)
Pj_i
Unterprogramme, die nicht selbst weiteren Unterprogrammen übergeordnet sind 77
Programm: Befehl
Nummer
(?)
(11)
Adr.
A ü AC T
(10)
[B U A S A AC T B A T B T
(8) (9)
Erläuterungen
Op.
[B \_T B AC T B AC ü S A 8 QQE B T B T
(11) 1 (8) 0] (12) (11) (10) (13) 3 (14)
|
B {1. P a r . } - > ( 1 1 )
J
B {2. P a r . } - > (8) ri -*• (12)
Rücksprungbefehl(14)
(5) (12)
B { a 0 } + 1 (im U n t e r p r o g r a m m ) + (3)
(3) (15)
T {2. P a r . }
(9) 0] 0] (8) 1 (8) (9) 1 (9) (16) (10) (3)
f
(9)
i-ten Parameter übernehmen
i
i íS
1
i
S p r u n g n a c h (8)
(8) (5) (2) (7) 6
• — i
*K-1>-Ma>
an -> P n - > 6
78
Di© Versorgung von Unterprogrammen mit Parametern
Programm
Nummer
®
(4)
(Fortsetzung)
Befehl Op.
Adr.
B
(1)
X (2)
[B
0]
+
B
(2)
AC
1
U
(2)
s (14)
(4)
B
6 0]
[ E
(16) (15) (13)
T
0
T
(1)
E
(10)
B
0 0 (6) 0]
(5) (3)
©
(3)
QQE
(12) (1) (7)
(6)
B
[B [0] [0] [0] [0]
Erläuterungen
xPi
+ a i _!
i— B { a
i > 0
i
B{at-i}
_
1
)
+ 1 +B
{ o ^ J
Sprung nach (4)
P, ->P(x)-+
4
Rücksprung
B {a 0 } -f-1 im Unterprogramm n
FK
x an an
GK —l
Wir sehen, der Aufwand für die Übernahme des Parameterblocks ist erheblich. Das liegt vor allem daran, daß die Blocklänge (im allgemeinen) erst separat übernommen werden muß. Die Verhältnisse wären günstiger, wenn wir den Fall (3) benutzt hätten. Denn im Hauptprogramm ist die Blocklänge ja explizit bekannt. Alle Verfahren, bei denen Parameterblöcke umgespeichert werden, haben den gemeinsamen Nachteil, daß doppelter Speicherplatz benötigt wird,
Unterprogramme, die nicht selbst weiteren Unterprogrammen übergeordnet sind 79
einmal im Hauptprogramm und zum anderen im Unterprogramm bzw. an einer maschinenfesten Stelle. Wir wollen daher das gleiche Unterprogramm einmal so umschreiben, daß die einzelnen Parameter nach Bedarf aus dem Hauptprogramm entnommen werden (Fall 2). Beispiel: Unterprogramm, „Hornersches
Schema" n
P{X) = 2 ViX t= 0 1. Parameter: x 2. Parameter: B { a 0 }
GK GK
3. Parameter: B {a B } Voraussetzung: {a,} = {a 0 }
(i = 0 , 1 , 2, . . . n)
Ergebnis: Beim Rücksprung ist < 4 > = Programm: Nummer
®
(6)
P(x)
Schema'a
„Hornersches Befehl Op.
Adr.
A U
(3) (2)
S
(3)
A AC U S A AC U S A AC T [B U
(4) 1 (5) (4) (3) 1
Erläuterungen
S{B
{a0}}^(5)
B {B { « „ } } - > (6)
(6)
(3) (7) 1 (8)
0] (9)
Rücksprungbefehl -> (8)
80
Die Versorgung von Unterprogrammen mit Parametern
Programm.: „Hornerschea Schema" (Fortsetzung) Befehl
Nummer Op. SC T
Erläuterungen
Adr.
(9)
[
B T
1 (1) 0 ] 6
(2)
[
B
0 ]
(1)
[
B
P «6; o» -s-P,-*-
B
0
B SC u
(1) 1
+
[ s PPE
(8)
[
B
6
]
B {« a |
1000'
r
7.2 Änderungen 2. und 3. Art Die Änderungen 2. Art haben wir im Kapitel 6 und die Änderungen 3. Art haben wir im Kapitel 3 bereits ausführlich besprochen. Allerdings haben wir sie dort nicht mit einem besonderen Namen belegt. Wir werden auf diese Änderungen noch einmal im nächsten Kapitel zu sprechen kommen. 8 Automatisierung von Adressenänderungen In Anbetracht der Tatsache, daß ein wesentlicher Teil der Programmierungsarbeit für Adressenänderung aufgewendet werden muß, ist es nicht verwunderlich, daß bei vielen Maschinen technische Einrichtungen vorgesehen sind, um gewisse typische Änderungen zu automatisieren. 8.1 Automatisierung der Änderungen 1. Art Wir hatten gesehen, daß Änderungen 1. Art auf einfache Weise während der Eingabe erledigt werden können. Zu diesem Zweck wurden die zu
Automatisierung der Änderungen 1. Art
91
ändernden Befehle mit besonderen Kennzeichen (Bandbefehl A n) versehen und der Betrag, um den die Adressen verschoben werden sollen, in einer bestimmten Referenzzelle r gespeichert. Automatische Vorrichtungen für die Änderungen l . A r t arbeiten ganz ähnlich: In den Befehlscode werden Zeichen aufgenommen, die vom Leitwerk unmittelbar vor der Ausführung des Befehls als Anweisung „Adressenänderung 1. Art" gedeutet werden. Daraufhin wird vor der Ausführung des Befehls der Inhalt eines bestimmten Referenzspeichers zu der Adresse des gekennzeichneten Befehls addiert. Man nennt diese Referenzspeicher „Indexregister", weil sie auch bei den Änderungen 3. Art benötigt werden und dort eng mit dem Indexwert von Variablen in induktiven Zyklen zusammenhängen. Für die Einrichtung von Indexregistern bieten sich die beiden folgenden Möglichkeiten an: a) Es werden ein oder mehrere Spezialregister vorgesehen; b) Ein Teil des Schnellspeichers oder der ganze Schnellspeicher kann die Funktionen der Indexregister übernehmen. Die Kennzeichnung von Befehlen kann verschieden gehandhabt werden: Beispiel für (a):
~
~
~
Der Befehl enthält neben dem Operationsteil ( 0 P ) und dem Adressenteil (A) eine Indexnummer (7). Ist I von Null verschieden, so bedeutet das, daß der Befehl noch einer Änderung 1. Art unterworfen werden soll. I gibt dann die Nummer des Indexregisters an, das für die Adressenkorrektur benutzt werden soll. Es müssen natürlich noch besondere Befehle vorgesehen werden, mit deren Hilfe die Indexregister gefüllt werden können. Beispiel für (b): In der Z 22 können alle Schnellspeicher als Indexregister fungieren. OP
G
s
+t
Der Befehl erhält im Operationsteil ein Zusatzzeichen G, und die Adresse besteht aus zwei, durch ein Pluszeichen verbundenen Teilen: die Adresse s des als Indexregister benutzten Schnellspeichers und die zu verändernde Trommeladresse t. Es ist klar, daß auf diese Weise nur Trommeladressen verändert werden können. Das ist aber auch sinnvoll, weil ein automatischer
Automatisierung von Adressenänderungen
92
Ablauf von Befehlsfolgen sowieso nur für den Trommelspeicher vorgesehen ist. Wir wollen also vereinbaren: xO s -f-< bedeutet: (< -f- < « > ) t t dann Ausführung des Befehls xt. Dabei ist x Grandbefehl (mit Zusatz- und Bedingungszeichen, jedoch ohne C) s Schnellspeicheradresse t Trommeladresse o t < 2 13 (a)t Trommeladressenteil der Zahl a. Das sind die letzten 13 Dualstellen von a. Programmbeispiel: Die Programmierung der Änderungen 1. Art mit Hilfe eines Indexregisters kann folgendermaßen vonstatten gehen: Es wird verabredet: a) Für die Änderungen 1. Art wird stets der Schnellspeicher 11 benutzt. b) Vor dem Absprung auf ein Unterprogramm wird dessen Anfangsadresse nach Schnellspeicher 11 gebracht. c) Die Programme werden von Null (und nicht von 1000) anfangend durchnumeriert. Aus (a) folgt, daß bei verschachtelten Unterprogrammen der Schnellspeicher 11 vor dem Absprung auf ein Unterprogramm im allgemeinen geräumt werden muß. Programm: „Hornersches Schema" Hauptprogramm:
P
B T BC E
P+ l p+ 2 p+ 3
x B B
p 11 p+1 (q) a0 a„
Sprung auf das Unterprogramm
Automatisierung der Änderungen 2. Art
93
Programm: „Hornersches Nummer
Schema"
(vgl. S. 89) Befehl
Nummer
Befehl Adr.
Op.
Adr.
0
AG
11 + 3 3
18
[B
0]
1
UG
11 + 2 0
19
T
6
2
SG
11 + 3 3
20
[B
0]
Op.
3
AG
11 + 3 2
21
X
4
AC
1
22
[B
5
UG
11 + 2 7
23
6
SG
11 + 3 2
24
BG
11 + 2 2
7
AG
11 + 3 3
25
SC
1
8
AC
1
26
UG
11 + 2 2
9
UG
11 + 1 4
27 28
PPE
11 + 2 0
29
BG
11 + 1 4
30
[E
0]
10
SG
11 + 3 3
11
AG
11 + 3 1
12
AC
1
13
TG
11 + 3 0
14 15
[B UG
0]
+
0]
[S
0]
31
E
0
11 + 1 8
32
S
0
33
B
0
16
SC
1
17
TG
11 + 2 2
8.2 Automatisierung der Änderungen 2. Art (Literatur [7]) 8.21 Automatisierung von Blocktransporten Wir hatten in Kapitel 6 gesehen, daß die Versorgung eines Unterprogrammes mit Parametern dadurch gelöst werden kann, daß der hinter dei Absprungstelle im Hauptprogramm stehende Parameterblock in eine bestimmte Gruppe von Zellen des Unterprogrammes überführt wird. Eine Automatisierung dieses Vorganges kann so aussehen:
94
Automatisierung von Adressenänderungen
Hauptprogramm : p-1 V
k Indexregister Sprung auf das Unterprogramm mit Blocktransport
Adresse k Adresse s-\-k
Î>+1 Parameterblock p+k Unterprogramm :
Platz für Parameterblock s+k — 1 s+k
Anfang des eigentlichen Unterprogrammes
Der Sprungbefehl mit automatischem Blocktransport benötigt die im Indexregister stehende Blocklänge und den in der Sprungadresse enthaltenen Anfang des Unterprogrammes. Da der Blocktransport für den Anschluß von Unterprogrammen häufig nicht geeignet ist, führen wir diese Methode hier nicht weiter aus, sondern betrachten eine andere Möglichkeit. 8.22 Ablaufnotierung und Adressentranslation
Wenn wir daran festhalten, den Parameterblock unmittelbar hinter der Absprungstelle (p) im Hauptprogramm bereitzustellen, haben wir die folgende einfache Möglichkeit, Parameter in das Unterprogramm zu übernehmen : a) Wir führen einen besonderen Sprungbefehl ein, der nebenbei die Anfangsadresse des Parameterblocks ( p + 1 ) in ein bestimmtes Indexregister transportiert [13]. b) Wir sehen eine automatische Adressentranslation mit Indexregistern vor, wie wir sie schon für die Änderungen 1. Art eingeführt haben.
Automatisierung der Änderungen 2. Art
95
Ausführungsbeispiel Z 22 Es wird verabredet: Zu dem Grundbefehl E kann das Zusatzzeichen F zugefügt werden. Der Befehl EF wird mit F abgekürzt. F n bewirkt: < » >
BR (Sprung auf < r a » , ferner Befehl E p + 1 Schnellspeicher 5 Dabei ist p + 1 die Adresse des auf Fn folgenden Befehls. Hauptprogramm :
F(q)
p p+1
1. Parameter
p-\-i
i-ter Par.
p+k p+k+1
&-ter Par.
E(p -{-!)-> 5, Sprung auf (q)
Unterprogramm (?)
•
BG 5
+(i—1)
EG5+k
i-ter Parameter -> 4
Rücksprung nach p + k -f-1
Automatisierung von Adressenänderungen
96
8.23 Zusätzlich zu (8.22) nachfolgende Adressensubstitution
Durch die in (8.22) beschriebene Ablaufnotierung und Adressentranslation können wir ohne weiteres den Rücksprungsbefehl und die Übernahme eines im Parameterblock des Hauptprogrammes stehenden Parameters mit jeweils einem Befehl durchführen. Schwieriger wird es allerdings, wenn im Parameterblock nur die Adresse der im Unterprogramm benötigten Größe vorliegt. Wenn wir auch in diesem Fall mit nur einem Befehl auskommen wollen, müssen wir eine automatische Adressensubstitution folgen lassen. Wenn wir Wert darauf legen, auch mehrfache Substitutionen nachfolgen zu lassen, müssen wir das Substitutionszeichen nicht im Operationsteil unseres Befehls, sondern an der zu substituierenden Adresse anbringen. Wir wollen unser Beispiel aus (8.22) entsprechend erweitern und als Substitutionskennzeichen an der Adresse einen Stern anbringen [6]. Hauptprogramm : P
F(q)
•
p+1
•
b*
Parameter
p+i
Unterprogramm:
Speicher:
BG5 + (»—1)
c —> 4
a* EG 5 +k
p+k Die Adresse des Befehls BG5-\-(i—1) erleidet dann nacheinander folgende Veränderungen: ß+(i-l) (p+l)+(i-l) =
p+i
a b Damit kann c erreicht werden. Es wird stets solange substituiert, bis eine nicht gestirnte Adresse vorliegt.
Automatisierung der Änderungen 2. Art
97
8.24 Besonderheiten bei verschachtelten Unterprogrammen
Liegen innerhalb eines Programmsystems mehrere ineinander verschachtelte Unterprogramme vor, so haben wir die in (6.2) erwähnten Schwierigkeiten. Wollen wir jedes Programm von dem ihm unmittelbar übergeordneten Programm aus versorgen, so können wir folgendes tun: a) Der Rückkehradressenspeicher wird jeweils geräumt, wenn auf ein untergeordnetes Programm gesprungen werden soll. b) Der Rückkehradressenspeicher ist in mehreren Exemplaren unter der gleichen Adresse erreichbar. Ein besonderer Zähler, der bei jedem Absprung um eins erhöht und bei jedem Rücksprung um eins erniedrigt wird, zeigt den jeweiligen Verschachtelungsgrad an und entscheidet damit, welches Exemplar des Rückkehradressenspeichers jeweils unter der Rückkehradressenspeicher-Adresse erreichbar ist. Wollen wir dagegen alle Programme vom Hauptprogramm aus versorgen, so müssen wir wieder die nachgeschaltete Adressensubstitution vorsehen. Das Hauptprogramm erhält für jedes Unterprogramm einen Parameterblock. Im Parameterblock für das Unterprogramm (2) können dann Adressen stehen, die auf Zellen hinweisen, die im Parameterblock für das Unterprogramm (1) stehen. Dorthin hat (1) die für (2) bestimmten Parameter abgelegt. E i n P r o g r a m m b e i s p i e l für (a): Es soll eine Sinus-Tabelle berechnet werden. Die Argumente a^ (i = 0, 1, 2 . . . 99) stehen in den Speicherzellen 2000, 2001 . . . 2099. Die berechneten Sinuswerte sollen nach 3000, 3001 . . . 3099 gespeichert werden. Es sind folgende Programme beteiligt: 1. Hauptprogramm 2. Unterprogramm „Sinus", ab 5000 gespeichert 3. Unterprogramm „Hornersches Schema", ab 4000 gespeichert. Wir wollen hier die Änderungen 1. Art außer Betracht lassen und symbolische Adressen verwenden. Der Rückkehradressenspeicher soll jeweils geräumt werden. Da die Funktionsbefehle die Schnellspeicher 3 . . . 10 belegen, muß < 5 > auch 7
Güntsch, Digitale Bechenautomaten
Automatisierung von Adressenänderungen
98
beim Absprung auf das 1. Unterprogramm in Sicherheit gebracht werden, wenn es Funktionsbefehle enthält. Wir wollen verabreden, daß < 5 > in 11 abgelegt wird, und 11 beim Absprung auf weitere Unterprogramme geräumt wird. Unterprogramm: „Hornersches Schema" Wir halten uns an das Beispiel auf Seite 79 und setzen nun allerdings voraus, daß das Programm mit einem _F-Befehl aufgerufen wurde. Programm: ,,Hornersches Schema" Nummer
Befehl Op.
Adr.
B T BG U SC T [B T
5 11 11 + 2 (3) 1 (1) 0] 6
(2)
BG X
11 + 0
(1)
[B
(3)
+
Erläuterungen
|
Ablaufnotierung ->-11
}
(3)
B { B [ a
»
) ]
} £ { « „ _ ! } - • (1) 1
P
ß
B
w
B{x}
0]
B SC ü SG PPE
(1) 1 (1) 11+1 (2)
B EG
6 11 + 3
5
- 1
2* { « , _ ! } - • (1) S{B
{«„}}
Rücksprung auf das übergeordnete Programm
Automatisierung der Änderungen 2. Art
Programm:
99
„Sinus"
(vgl. Beispiel S. 83) Nummer
Befehl Op.
Adr.
B T BG U X T
5 11 11 + 0 6
B B T B T BG X EG
I I Ablaufnotierung-> 11
x 2,
p1 für,,Horner8chesSchema"-> (4)
(4)
11
B T FG (4)
Erläuterungen
(1)
11+1
Ablaufnotierung
Sprung auf „Hornersches Schema"
[0]
B{a0} B {«„}
(2) (3)
6 (1)
11 11 + 0 11
+2
xP{x i)
7t
sin — x-+4 ¿i Ablaufnotierung 11 Rücksprung auf das übergeordnete Programm
(2)
a3 (3) (1)
1*
®4 [.E
(1)
0]
Ablaufnotierung
100
Automatisierung von Adressenänderungen
Hauptprogramm Nummer
(3)
Befehl
B T B T
(4) (3) (5) (1)
B T B AG T F
0 (1) (3) 1 (3) 5000 [()]
(1)
B AG U S QQE (5) (4) (2)
T B T
3000 2000 3100
[T
} B {*„}-> (3) J
T{sinz0}-*(5)
} Sprung auf „Sinus" Xt
4000 0] (1) 1 (1) (2) (3)
E
Erläuterungen
Adr.
Op.
E {„Hornersches Schema"} T {sin xf} T {sin Xi} + 1
T {sin xt}
(1)
8.3 Automatisierung der Änderungen 3. Art Die Adressenänderungen 3. Art können ebenfalls mit Hilfe der Adressentranslation unter Verwendung von Indexregistern automatisiert werden. Diese Indexregister werden nach Möglichkeit gleich zum Zählen eingerichtet. Genau wie bei verschachtelten Unterprogrammen müssen wir die Besonderheiten untersuchen, die sich bei verschachtelten Schleifen ergeben. Wir haben es hier einfacher als bei den Änderungen 2. Art, weil — wenigstens innerhalb eines Programmes — der Verschachtelungsgrad einer bestimmten Schleife unverändert bleibt.
Automatisierung der Änderungen 3. Art
101
Daher können wir folgendermaßen vorgehen: a) Es wird ein Indexregister vorgesehen, dessen Inhalt bei Bedarf geräumt wird. b) Es wird ein Indexregister in mehreren Exemplaren vorgesehen und daneben ein Zähler für den Verschachtelungsgrad eingerichtet, der angibt, welches Exemplar jeweils gemeint ist. c) Es werden mehrere Indexregister nebeneinander benutzt, die unter verschiedenen Adressen zu erreichen sind. Vollständige Zählautomatisierung mit dreigeteilten
Indexregistern
Für die einzelnen Indexregister läßt sich eine weitgehende Automatisierung der Adressenänderungen auf folgende Weise mit einer Prüfung auf das Erreichen einer vorgeschriebenen Durchlaufzahl des Zyklusses verbinden. Jedes Indexregister i wird in folgende drei Teile aufgespalten: ia iz ie
enthält den Anfangswert einer Zählgröße, enthält den Adressenzuwachs von Zahl zu Zahl innerhalb der Folge, enthält den Endwert der Zählgröße. Dann werden besondere Befehlszusätze vorgesehen, die
1. zur Adresse eines Befehls < i 0 > hinzuaddieren und 2. zum Inhalt von ia den von iz addieren. Ferner werden bedingte Sprungbefehle eingeführt, die nur dann ausgeführt werden, wenn Pi—i ;
B { a f }
i
Rücksprung auf das übergeordnete Programm („Sinus")
„Sinus"
Es benötigt aus dem Hauptprogramm die folgenden Parameter: 1. x
(Argument)
2. E q (Sprung auf das Unterprogramm „Hornersches Schema"). Das Ergebnis wird an Stelle von x im Parameterblock des übergeordneten Programm gespeichert. Das Programm benötigt (zusammen mit dem Programm Hornersches Schema) die Schnellspeicher 2, 11, 12.
104 Programm:
Automatisierung von Adressenänderungen ,,Sinus" Befehl
Erläuterungen
Op.
Adr.
B T BG U X T SNG T B T FG
5 11 11 + 0 6 (1) 4 (2) 11 (3) 11+1
I Ablauf -Notierung
11
x2 =#- Argument f ü r „Hornersches Schema" 4 => — r i f ü r „Hornersches Schema" 11 räumen
(2)
Sprung auf „Hornersches Schema"
[0] *
B {an} — r i , später
(4) [0]
B T B T BG X TG EG
(3) 11 (1) 6 11 + 0 11 + 0 11 + 2
[0]
Ablauf notierung -> 11
z P (x2)
sin x
Rücksprung auf das übergeordnete Programm (Hauptprogramm)
Ablaufnotierung
Programmumdeutung und -Umrechnung
105
Hauptprogramm: Es benötigt (einschließlich seiner Unterprogramme) die Schnellspeicher 2, 11, 12, 13, 14 Befehl Op. B T B T BG T F [0] E B TJ B SJ PPE
B T B
Erläuterungen
Adr. (1)
13 (2)
14 13 + 0 (3) 5000
| B { z 0 } ^ 1 3 ; 0 ->% | T {sin x0} — 1 | Zi
14
Argument für sin x
Sprung auf „Sinus" Xi
4000 | (3) 14+1 (4) 13 + 1 (5)
E {„Hornersches Schema"} | sin x{ speichern i -f-1 i i ig 99 Sprung
2000 2299 2099
9 Programmumdeutung und -Umrechnung Wir haben uns in den vorangehenden Kapiteln klar gemacht, wie Adressenänderungen durch Programme erledigen können. Hier wollen zwei Programmtechniken betrachten, mit deren Hilfe auch andere ganisatorische Aufgaben, die beim Betrieb eines Rechenautomaten fallen, gelöst werden können.
wir wir oran-
106
Programmumdcutung und -Umrechnung
9.1 Hauptanwendungen Bevor wir in den folgenden Abschnitten die Umdeutung und Umrechnung von Programmen besprechen, wollen wir hier kurz die Hauptanwendungen für diese Techniken zusammenstellen. Es handelt sich bei allen Anwendungen stets darum, ein Programm, das in einer bestimmten, durch seine Herstellungsumstände bedingten Form vorliegt, in eine andere Form zu überführen. In den meisten Fällen ist das primäre Programm ohne eine entsprechende Umwandlung der Rechenmaschine überhaupt nicht verständlich, und die Aufgabe besteht einfach darin, das vorgelegte Programm so zu übersetzen, daß es vom Rechner verarbeitet werden kann. In anderen Fällen ist das vorgelegte Programm für den Rechner zwar verständlich; es soll jedoch in eine andere Form überführt werden, damit es in einer ganz bestimmten Weise (z. B. möglichst schnell oder unter Erstellung eines Protokolls abläuft. 9.11 Bequemer Extern-Code
In den meisten Fällen ist aus Gründen der Programmierungsbequemlichkeit extern eine andere Programmform erwünscht, als die durch den internen Befehlscode der Maschine festgelegte. Wir haben das bereits bei der Einführung der symbolischen Adressen erfahren. Die Bequemlichkeit im externen Befehlscode (wie wir die extern benutzte Programmierungsform nennen wollen) kann verschiedene Veränderungen gegenüber dem internen Befehlscode verlangen. 1. Plausible Abkürzungen für die Operationszeichen Es ist unangenehm, wenn man extern für die Operationen unsinnige Abkürzungen benutzen muß, die durch gewisse technische Gegegenheiten bedingt sind. Erwünscht sind plausible Zeichen, wie z.B. X = Multiplikation, D = Division usw. 2. Übersetzungen ins
Dualsystem
Bei Dualmaschinen möchte man im allgemeinen extern nur Dezimalzahlen verwenden. Die notwendigen Übersetzungen ins Dualsystem werden von der Maschine durch Programme erledigt.
Hauptanwendungen
107
3. Erweiterung des Befehlscodes durch Hinzunahme komplexer Befehle, die im Interncode nicht vorgesehen sind Extern werden häufig Operationen benötigt, die intern nicht mit einem Befehl, sondern mit Hilfe eines im allgemeinen kurzen Programmstückes realisiert werden. Beispiele: a) Erhöhung der Rechengenauigkeit Ist für eine bestimmte Aufgabe die intern vorgesehene Rechengenauigkeit (Wortlänge) nicht ausreichend, so muß sie auf dem Umweg über ein geeignetes Programm erreicht werden, in dem jeweils zwei, drei oder mehr Wörter als Teile einer Zahl aufgefaßt und geeignet verarbeitet werden. b) Gleitendes Komma Soll in einer Fest-Komma-Maschine mit gleitendem Komma gerechnet werden, so müssen die arithmetischen Operationen mit Hilfe eines Programmes aus den Fest-Komma-Operationen zusammengesetzt werden. c) Rechnen mit allgemeinen 'Zahlen Rechnungen mit komplexen Zahlen, Matrizen usw., müssen durch besondere Programme in der Weise realisiert werden, daß der Benutzer mit den allgemeineren Zahlen so umgehen kann wie mit gewöhnlichen Zahlen. d)
Funktionen
Für die häufigsten Funktionen, wie z.B. die trigonometrischen Funktionen, sollen extern einfach die Funktionszeichen (also etwa „sin") geschrieben werden. e) Zyklen Für die Organisation von zyklischen Programmen mit den zugehörigen Zählprozessen und Adressenänderungen 3. Art sind extern Sonderbefehle angenehm, die nur die wesentlichen Informationen, wie Anzahl der Durchläufe, Schrittweite bei Adressenänderung usw., enthalten (vgl. IMB-BELLCode [14]). 4. Die „automatische Programmierung" Den externen Bedürfnissen würde man am weitesten entgegenkommen, wenn man überhaupt keine eigentlichen Programme mehr zu schreiben brauchte, sondern sich mit der Notierung des Algorithmus begnügen
108
Programmuradeutung und -Umrechnung
könnte 1 ). Die Übertragung des Algorithmusses in ein Programm übernimmt dann ein Formelübersetzungsprogramm. 9.12 Die Erledigang von Umordnungsprozessen Es ist häufig wichtig, ein Programm mit Rücksicht auf hohe Rechengeschwindigkeit in besonderer Weise umzuordnen. Hier sind vor allem zwei wichtige Umordnungsprozesse zu nennen: 1. Umordnung mit Rücksicht auf Wartezeiten bei Trommel- (und Speichern („optimales Programmieren")
Laufzeit-)
Soll ein Programm auf einer Trommelmaschine schnell durchlaufen, so muß dafür gesorgt werden, daß die Befehle und Zahlen unter Berücksichtigung der Operationszeiten auf der Trommel in einer Reihenfolge notiert sind, die kleine Wartezeiten garantieren. Um das zu erreichen, muß ein ursprünglich erstelltes Programm geeignet umgeordnet werden. Eine solche Umordnung ist besonders einfach bei sogenannten 1,1-Adreß-Codes, d.h. bei Codes, deren Befehle mit einer Adresse den Operanden und mit einer zweiten Adresse den Folgebefehl spezifizieren (z.B. IBM 650). Bei einer weiteren Maschinenorganisation ist das Erstellen optimaler Programme noch einfacher, nämlich dann, wenn alle Befehle grundsätzlich die gleiche Zeit für ihre Ausführung benötigen (Beispiel Z 22) 2 ). 2. Umordnung mit Rücksicht auf gute
Schnellspeicherausnutzung
Bei Rechenmaschinen mit gemischtem Speicher ist es nötig, dafür zu sorgen, daß die benötigten Befehle und Zahlen im Schnellspeicher stehen, wenn sie gebraucht werden. Wird dies von der Maschine nicht automatisch gemacht (vgl. etwa [10]), so muß das Programm entsprechende Blocktransporte einsetzen. Zur Erzielung hoher Rechengeschwindigkeiten müssen das Programm und die Zahlen jedoch in jedem Fall so angeordnet werden, daß unnötige Blocktransporte nach Möglichkeit vermieden werden. 9.13 Simulierung von Rechnern Eine wichtige Aufgabe ist die Simulierung eines Rechners auf einen zweiten Rechner, d. h. der Befehlscode des ersten Rechners wird vom Die automatische Programmierung, durch die bekannte Arbeit von Rutishauser [2] ins Leben gerufen, ist inzwischen zu hoher Vollkommenheit gediehen (vgl. etwa Fortran [15]). In der letzten Zeit ist insbesondere der Aspekt einer gemeinsamen Externsprache für alle Universalrechner in den Vordergrund getreten (vgl. ALGOL [16]). Eine grundlegende Darstellung gibt Bottenbruch in seiner Dissertation |17], (dort auch weitere Literatur). a ) Da bei der Z 22 G-Befehle zu ihrer Ausführung im Gegensatz zu den gewöhnlichen Befehlen zwei Wortzeiten benötigen, werden die Programme optimal gemacht, indem hinter jedem G-Befehl jeweils eine Speicherstelle freigelassen wird (vgl. S. 122).
Programmumdeutung (interpretative Technik)
109
Programm auf dem zweiten Rechner nachgebildet. Diese Aufgabe entsteht z.B. in folgenden Fällen: a) Benutzung von Programmen einer anderen Maschine Stehen von einer anderen Maschine Programme zur Verfügung, so ist es manchmal ökonomischer, die anderen Maschinen kurzerhand zu simulieren, als neue Programme für die eigene Maschine zu schreiben. Es muß allerdings beachtet werden, daß durch die Simulierung eine erhebliche Verlangsamung des Programmablaufes entsteht. b) Programmierung einer
Spezialmaschine
Spezialmaschinen haben häufig ein sehr geringes Maß an ProgrammieTungsbequemlichkeit und sind wegen ihrer beschränkten Leistungsfähigkeit auch kaum in der Lage, sich diese Bequemlichkeit durch geeignete Übersetzungsprogramme zu verschaffen [18]. Daher wird zur Programmherstellung der Spezialrechner am besten auf einem Universalrechner simuliert. Damit erhält man indirekt die gewünschte Programmierungsbequemlichkeit. 9.14 Protokollierung
Besondere Aufmerksamkeit verdient das Ausprüfen neuer Programme. Dies kann in der Weise gemacht werden, daß das Programm in Teilabschnitten, zur Not sogar Befehl für Befehl, durchgearbeitet wird, während der Programmierer sich jeweils charakteristische Informationen über den Ablauf des Programms anzeigen oder ausdrucken läßt. Als systematisches Hilfsmittel für diese Arbeit bieten sich Protokollprogramme an, die jeden einzelnen Befehl des zu prüfenden Programms aus dem Speicher holen, ihn ausführen und gleichzeitig ein ausführliches Protokoll über den Programmablauf ausdrucken. Das heißt, alle ausgeführten Befehle und der Inhalt der wichtigsten Speicherzellen werden laufend notiert. Mit Hilfe solcher Protokolle können Programmfehler im allgemeinen einfach und sicher gefunden werden. Allerdings ist diese Gangart „Protokollieren" so langsam, daß die Maschine durch die Programmprüfung sehr lange belegt ist. 9.2 Programmumdeutung (interpretative Technik) Man spricht allgemein vom Umdeuten eines Programmes, wenn aus den einzelnen Befehlen einer Befehlsfolge neue Befehle oder Befehlsgruppen hergestellt und diese neuen Befehle nicht zu einem neuen Programm zusammengesetzt werden, sondern sofort nach der Herstellung ausgeführt
Programmumdeutung und -Umrechnung
110
werden. Ein Programm, das diese Umdeutung besorgt, nennt man ein Interpretationsprogramm. Beispiel: Rechnen mit komplexen Zahlen in gleitendem Komma Wir verabreden, daß für jede komplexe Zahl ein Paar benachbarter Speicherzellen (n, n + 1 ) reserviert wird. Ferner wollen wir vereinbaren, daß die Funktionsbefehle +,
X, :
als komplexe Operationen verstanden werden sollen, wenn ihnen jeweils drei Adressen nlt n2, n3 (also drei Zahlen in festem Komma) folgen. Normalerweise ist eine auf einen Funktionsbefehl folgende Zahl unsinnig, weil die Maschine bei der gewöhnlichen konsekutiven Abarbeitung der Befehle diese Zahl als Befehl auffassen würde. Die vier Befehle für komplexe Zahlen sollen folgende Wirkung haben:
± X
± nx n2 n3 bewirkt : •< (nv nt + 1 ) > X w 2 + 1 ) > w 3 , ra3-f-1.
Das interpretierende Programm durchsucht nun alle Befehle des gespeicherten Programmes und sorgt dafür, daß wie gewöhnlich einer nach dem anderen ausgeführt wird, bis ein Funktionsbefehl auftritt, auf den eine Zahl folgt. Dann werden, je nach dem Operationszeichen des Funktionsbefehls folgende Operationen ausgeführt: ±
% » 2 n3 '• < « i > ± < w 2 >
n3
< W X + 1 > ± < « 2 + 1 > -> » 3 4-1 X nx n2 n3 :
•
—
+1>
'
nz
• + < % > • < M 2 + l > - > w 3 + l :
n.1 M» n, : 2 3
< « , > • + < » ! + 1 > < W 2 + 1 > — ——; 2 + 2
n3
3
• < w 2 > + < % > < t t 2 + 1 > 2+2 Für das Interpretationsprogramm können wir ganz grob folgendes Flußdiagramm skizzieren:
Programmumrechnung (Superprogrammtechnik)
111
9.3 Programmumrechnung (Superprogrammtechnik) Die „Umrechnung" von Programmen wird von sogenannten Superprogrammen besorgt. Diese Superprogramme prüfen jeden Befehl des ursprünglichen — für die Maschine nicht unmittelbar verständlichen — Programms, ob er ein Original- oder ein Pseudobefehl ist. Bei Pseudobefehlen werden die zur Ausführung des Pseudobefehls benötigten Originalbefehle bereitgestellt und anstelle des Pseudobefehls in das Programm eingefügt. Auf diese Weise wird ein neues — der Maschine unmittelbar verständliches — Programm berechnet und anschließend gespeichert oder ausgegeben.
Programmtundeutung und -Umrechnung
112
Es gibt zwei wichtige Spielarten der Superprogrammtechnik: a) Umrechnung während der Eingabe mit Hilfe der uns schon bekannten Leseprogramme . b) Umrechnung eines Programmes, das schon gespeichert vorliegt. 9.4 Vergleich von Programmumrechnung und -umdeutung a)
Rechenzeit:
Da das umgedeutete Programm selbst unverändert bleibt, muß es bei jedem Durchlauf von neuem umgedeutet werden. Das Umrechnen erfolgt dagegen ein für allemal. Daher ist das Umrechnen bei mehrfach durchlaufenen und mehrfach benutzten Programmen schneller als das Umdeuten. Dies gilt um so mehr, wenn die Umrechnung während der Eingabe geschieht, weil während der Eingabe im allgemeinen ohnehin nutzlose Wartezeit anfällt, die zur Umrechnung, aber nicht zur Umdeutung benutzt werden kann. b) Speicherbedarf: Bei knappem Speicher ist bei der Umdeutung der Umstand unangenehm, daß das Interpretationsprogramm und das zu deutende Programm während der Rechnung gleichzeitig gespeichert sein müssen. Das Umrechnen dagegen kann stückweise geschehen. Die fertiggestellten Programmteile können später während der Rechnung den Speicher ganz in Anspruch nehmen, weil das Superprogramm dann nicht mehr benötigt wird. Andererseits sind die umgerechneten Programme im allgemeinen länger als die Originalprogramme, so daß der Fall eintreten kann, daß alle umgerechneten Programme zusammen auch ohne das Superprogramm länger sind als die Originalprogramme mit dem dazugehörigen Interpretationsprogramm. c) Schwierigkeiten in der ProgrammhersteUung Es ist im allgemeinen nicht besonders schwer, ein gewöhnliches Interpretationsprogramm oder ein Leseprogramm aufzustellen. Unangenehmer ist die Herstellung von Superprogrammen für bereits gespeicherte Programme, weil sich die Anzahl der Befehle ändert und damit neue Adressenänderungen nötig werden. 1 ) Solche Lesepropramme werden im englischen Sprachgebrauch "Compiler" genannt, wenn sie — wie der Name schon sagt — auch in der Lage sind, verschiedene Programmteile richtig zusammenzufügen (vergleiche Kapitel 11). In besonders weit ausgearbeiteten Systemen werden sogar die benötigten Unterprogramme selbständig aus einer auf Magnetbänder notierten Programmbibliothek herausgesucht und in das vorgelegte Programm einbezogen.
Vergleich von Programmumrechnung und -umdeutung
113
Aus a), b) und c) geht hervor, daß es nützlich ist, beide Techniken zu kombinieren. Das Umrechnen wird möglichst während der Eingabe vorgenommen und seltenere Varianten oder Programmwandlungen, die das Programm sehr lang machen würden, werden interpretativ erledigt. d)
Rückübersetzung
Bei der Benutzung von Superprogrammen (insbesondere von Leseprogrammen) ist es häufig wichtig, auch für die Rückübersetzung der Programme zu sorgen. Bei Leseprogrammen wird die Rückübersetzung im allgemeinen darin bestehen, geeignete Druckprogramme vorzusehen, die es gestatten, das umgerechnete Internprogramm mit dem ursprünglich vorgelegten Externprogramm zu vergleichen. Das beste Leseprogramm nützt nur wenig, wenn es nicht durch ein entsprechendes Druckprogramm ergänzt wird. Dieser Gesichtspunkt wird leider (auch bei dem Entwurf von Systemen zur Formelübersetzung) zu wenig beachtet. Eine sehr hoch entwickelte Form der Rückübersetzung ist die automatische Berechnung von Flußdiagrammen aus einem vorgegebenen Programm [19]. 10 Ein Externcode für die Z 22 und seine Beziehung zum Interncode Wir haben in (9.1) gesehen, daß Befehle und Zahlen oft extern in einer Weise notiert werden, die zwar für den Menschen bequem, aber für die Maschine nicht direkt verständlich ist. Die externen Angaben müssen dann von der Maschien entweder umgerechnet oder umgedeutet werden. Enthält die externe Notierung vor allem Pseudobefehle, die durch einen Internbefehl realisiert werden können, so empfiehlt sich die Umrechnung während der Eingabe, also die Aufbereitung des Extern-Programmes durch ein geeignetes Leseprogramm (vgl. 9.4). Es gibt einige Maschinen, für die diese extern-intern-Umwandlung lebensnotwendig ist. Das sind die Maschinen, deren Interncode so primitiv ist, daß selbst einfachere arithmetische Operationen, wie die Multiplikation, programmiert werden müssen. Die direkte Benutzung des Interncodes ist normalerweise undiskutabel. Erst durch die Verwendung eines einfachen Externcodes werden solche Maschinen für den gewöhnlichen Rechenbetrieb brauchbar. B e i s p i e l : Z 22 Die Z 22 ist genau von der oben beschriebenen Art. Der bislang von uns verwendete Befehlscode ist im wesentlichen ein externer Code. Die interne 8
Güntsch, Digitale Bechenautomaten
114
Ein Extemcode für die Z 22 und seine Beziehung zum Interncode
Zahlendarstellung haben wir in (2) besprochen. Dabei ist nur die Darstellung negativer Zahlen durch die Konstruktion der Maschine festgelegt, während die Zuordnung von Stellenwerten eine Verabredung der Maschinenbenutzer ist. Die Darstellung von Zahlen in gleitendem Komma ist vollkommen willkürlich. Wir wollen zuerst den internen Befehlscode der Z 22 einigermaßen vollständig vorführen. 10.1 Der interne Befehlscode der Z 221) Alle Transporte benötigen eine Wortzeit l Ausnahme : G. Alle angeführten Wirkungen geschehen gleichzeitig J Name
Bedeutung bzw. Wirkung Bit 1 Bit 2
Kennzeichen für die Wortart:
PP P QQ Q Y
0 1 0 1
Positive Zahl Klartextwort Befehl Negative Zahl
^ 0 Befehl wird < 2 > ^ 0 Darin sind 2, 3, 4 Schnellspeicheradressen. nur ausge< 4 X 0 Bei ir-Befehlen werden die führt, wenn: < 2 X 0 < 3 > 3 8 = 1 Adressenänderungen unbedingt ausgeführt (vgl. Nr. 19), Kombinationen von Bedingungen werden konjunktiv verarbeitet. CA: CI: CU: CE: CG:
N
0 0 1 1
Wortart
1 ! . . . i9 wird gelöscht. Dann werden A bzw. I j ausgeführt. Dabei wird anstelle von < « > Ohne Wirkung im Rechenwerk. [benutzt. 0->BR (verboten!) Siehe unter Nr. 19
NA, NI:
„„ NU:
Vor 1 , > Ausfuhrung des Befehls: 0 -> 4 Nach J
') Zum Verständnis der folgenden Tabelle vergleiche Kapitel 1.3, 2.2 und 8, sowie die Bemerkungen auf S. 116 ff.
115
Die interne Befehlscode der Z 22
Name
Bedeutung bzw. Wirkung Bit 10 Bit 11 jiv/1)
LL B
]U
vor | Ausführung 1 nach J des Befehls: 1 0
S F
K
H Z
0 0 1 1
0 1 0 1
-+BR +1'^BZ +^4 < 4 >->w -*BB + ^ 4
< « > wird vor Ausführung Befehls negiert. Bei CG2) wird negiert
SA: SI:
5
KG: Siehe unter Nr. 19 KG: Es wird nur der Schnellspeicher gemäß s gewählt. Die Trommelspeicherauswahl wird unterdrückt. K: Es wird < » > = < s > v < £ > aufgerufen (stellenweise Disjunktion) Bs +t: < s > v < i > - > 4 ; Ts +t: < 4 > - > « , < l->(3) 8 8 Stop Kombination
1. Wortzeit
2. Wortzeit
0 ... GK ... CGK ...
t t [ + t]t t [ +t]t^t +1
wie GKC
G, s werden gelöscht. GK, s werden gelöscht. CGK, s werd. gelöscht.
G CG ... in allen 4 Fällen
*) A vi
4 • -s-4 2-^4 i/2.^4
Wirkung
Bit 12 Bit 13 E A U I
0 1 1
+!'->• BZ
G, s werden gelöscht. Befehl wird mit den restlichen Op.-Zeichen und der geänderten Adresse ausgeführt.
bedeutet: B e i A oder I.
') CQ bedeutet: Wenn der Befehl außerdem C aber nicht gleichzeitig O enthält.
8*
Wirkung
116
Ein Externcode für die Z 22 und seine Beziehung zum Interncode
Bit Nr.
Name
20
IT
VR: 1 Der Akkumulatorinhalt < 3 > und < 4 > wird als VLLR: J Wort doppelter Länge gemeinsam verschoben.
s
Schnellspeicheradresse
t
Trommelspeicheradresse
Bedeutung bzw. Wirkung
21 •
25 26 •
38 B e m e r k u n g e n zum I n t e r n c o d e Zu Bit 1 und 2 Zwei Bits des Befehlswortes kennzeichnen die Wortart; sie geben also an, ob es sich um eine positive oder negative Zahl handelt oder ob das Wort ein Befehl oder ein Klartextwort darstellt. Diese Kennzeichnung der Wortart ist besonders wertvoll für die Ausprüfung von Programmen, bei der Programmirrläufer häufig daran erkannt werden können, daß Befehle an Speicherplätzen stehen, wo Zahlen oder Klartextwörter hingehören und umgekehrt. Weiter ist die Kennzeichnung der Wortart für Programmumdeutung und -Umrechnung wichtig, weil diese Kennzeichnung die Möglichkeit bietet, die Programmumwandlung auf einfache Weise auf bestimmte Wortarten zu beschränken. Die Kennzeichnung positiver bzw. negativer Zahlen durch zwei Nullen bzw. Einsen in den ersten Stellen des Wortes ist schon in Kapitel 2 beschrieben worden. Die Festlegung über die Kennzeichnung von Befehlen und Klartextwörtern ist willkürlich. Befehle erscheinen also im Zusammenhang mit den Bedingungsabfragen P ,PP, Q und QQ als negativ. Bei den Klartextwörtern handelt es sich um Wörter mit willkürlichen Null-Eins-Gruppierungen. Es ist dabei besonders an Wörter gedacht, die sieben Fernschreibzeichen zu je fünf Bits enthalten. Zu Bit 3 bis 7 Die Bedingungen sind uns bereits bekannt. Hinzu kommt lediglich Y, das für die Multiplikation von Dualzahlen benötigt wird. Die Multiplikation
Die interne Befehlscode der Z 22
117
wird ja, wie wir schon erwähnt haben, durch Programme erledigt. Sie geht nach folgendem Schema vonstatten: Das Produkt wird durch wiederholte Addition des Multiplikanden (MD) aufgebaut. Dabei wird der Aufbauwert (A) jeweils um eine Stelle nach rechts verschoben. Der Additionsvorgang wird durch den Ziffernwert der einzelnen Stellen des Multiplikators (MR) gesteuert. Ist eine Multiplikatorstelle gleich eins, so wird MD zu A addiert, sonst nicht. MR wird im Schnellspeicher 3 untergebracht und mit jedem Schritt um eine Stelle nach rechts verschoben, so daß in der letzten Stelle jeweils die Multiplikatorstelle steht, die entscheidet, ob addiert wird oder nicht. Für A und M R genügt zusammen das Schnellspeicherpaar 2 und 3, weil im gleichen Maße, wie die Stellenzahl von A wächst, diejenige von MR durch die Rechtsverschiebung abnimmt. 2 und 3 sind daher als gemeinsam verschiebbare Doppelregister ausgelegt (vgl. V). Wir wollen ein vereinfachtes Multiplikationsbeispiel angeben: Multplikand 00,011011 Aufbauwert
Multiplikator
00,000000
00,10110 1 Addieren
00 011011 00 001101
10 010110
Rechtsverschieben
00 000110
11 001011
R A
00 100001 00 010000
111 30101
R A
00 101011 00 010101
1111L001 0
R
00 001010
11111 301
R A
00 100101 00,010010
11 111] 00
R
Produkt Die Bedingung Y trägt also wesentlich zur Beschleunigung des Multiplikationsprogrammes bei
118
Ein Externcode für die Z 22 und seine Beziehung zum Interncode
Bei bedingten G-'-Befehlen werden die Adressenänderungen auch dann ausgeführt, wenn die Ausführung des eigentlichen Befehls auf Grund der Bedingung unterbunden wird. Es ist auch erlaubt, in einen Befehl mehrere Bedingungszeichen unterzubringen. Die resultierende Bedingung setzt sich dann konjunktiv aus den Einzelbedingungen zusammen. Das heißt, es müssen jeweils alle zu den einzelnen Bedingungzzeichen gehörenden Bedingungen erfüllt sein, damit der Befehl ausgeführt wird. Zu Bit 12 und 13 Bit 12 und 13 sind im Gegensatz zu den meisten übrigen Bits des Operationsteiles verschlüsselt; denn die vier Befehle E, A, U und I schließen sich gegenseitig aus. Wir wollen hier die Vorgänge im Befehlswerk etwas näher beschreiben . Es soll dabei insbesondere klar werden, auf welche Weise es erreicht wird, daß die Befehle, mit Ausnahme der Sprungbefehle, die Reihenfolge durchlaufen, in der sie im Speicher stehen. Die Zeichen A, U und I haben außer der Wirkung auf das Rechenwerk auch einen Einfluß auf das Leitwerk, der bewirkt, daß bis zum Auftreten eines Sprungbefehls (E), die Befehle in der Reihenfolge aufgerufen und ausgeführt werden, in der sie auf der Trommel gespeichert sind. Durch einen Sprungbefehl wird diese Folge unterbrochen und statt dessen die Abwicklung einer neuen Befehlsfolge eingeleitet. Dabei liefert die Adresse des Sprungbefehls den Anfangspunkt für die neue Folge. Bei den meisten Rechenmaschinen ist zu diesem Zweck ein besonderer Zähler vorgesehen, der durch die Adresse der Sprungbefehle eingestellt und jeweils nach der Ausführung eines jeden Befehls um eins weiter geschaltet wird. Dieser Zähler steuert dann die Speicherauswahl und bewirkt, daß die Befehle in der vorgesehenen Reihenfolge dem Speicher entnommen und dem Leitwerk zugeführt werden. Eine andere Möglichkeit ist von van der Poel ([20], [21]) angegeben und auch in der Z 22 benutzt worden. Bei dieser Anordnung ist kein besonderer Zähler vorgesehen, sondern ein Sprungbefehl kreist dauernd von BR nach BZ und zurück. Das zwischen BB und BZ eingebaute Addierwerk (vgl. das Blockschaltbild auf S. 16) erhöht die Adresse der von BR nach BZ transportieren Befehle stets um eins, so daß der umlaufende Sprungbefehl nach jedem Durchlauf mit einer um eins weitergeschalteten Adresse im Befehlsregister steht und auf diese Weise einen Befehl nach dem anderen aus dem Speicher holt.
Die interne Befehlscode der Z 22
119
Diese Befehle werden auch jeweils mit Adressenerhöhung nach BZ gebracht, wandern aber nur dann zurück nach BR, wenn sie Sprungbefehle sind. In diesem Falle ist die ursprüngliche Befehlsfolge unterbrochen, und von nun an beginnt der eingeschriebene Sprungbefehl einen eigenen Zyklus BR-> BZ-+ BR usw. Dieser Ablauf sei an einem einfachen Beispiel noch einmal erläutert. Speicher
Ablauftabelle
Nummer
300 301 302
BR
Inhalt
B 517 8 526 PPE 600
i
526
10
600
B
Akkumulator
B
517 \ / E 301
—
E
301 ^
B 518
i
S
526. \
E 302
i
E
302 ^
S 527
i— 10 (sei ^ 0)
E 303
i— 10
B
511. y E 601
i— 10
E
601 ^^ B 512
31 Zwischenraum 32 (nicht benatit)
Für die fortlaufende Speicherung gemäß 1, 2 , 4 und 5 wird im Schnellspeicher 13 ein B Strom Speicherbefehl (Tn) bereitgestellt. Das Lese• kein Strom programm sorgt für die laufende Erhöhung seiner Adresse. Dieser Speicherbefehl muß zu Anfang durch einen Bandbefehl (siehe dort) nach 13 gebracht werden. Es können alle Wortarten (1) . . . (5) in beliebiger Reihenfolge geschrieben werden. Bei Irrung ist, außer bei Klartext, das Zeichen BuBu (zweimal Buchstabentaste) zu lochen. Dann wird das fehlerhafte Wort nicht gelesen und kann richtiggestellt wiederholt werden. Bei Klartext muß der falsche Text mit BuBu ... überdeckt werden. Die Folge der BuBu . . . wird dann nicht gespeichert. Leeres Band wird ignoriert. Für jede Wortart ist ein Schlußzeichen definiert. Wird es vom Band gelesen, so wird der interne Text fertiggestellt und gespeichert bzw. aus-
124
Ein Externcode für die Z 22 und seine Beziehung zum Interncode
geführt. Nach dem Schlußzeichen eines Wortes und vor dem Anfang des nächsten Wortes können beliebige Betriebszeichen der Fernschreibmaschine eingestreut werden. 10.21 Gewöhnliehe Befehle
Gewöhnliche Befehle entsprechen den Befehlen des internen Befehlscodes. Sie unterscheiden sich von diesen dadurch, daß einige Freiheiten in der Notierung den externen Gebrauch dieser Befehle erleichtern. Jeder Befehl erhält einen Operationsteil und einen nachfolgenden Adressenteil. Schlußzeichen für diese Befehle ist Zw oder ZI nach der Adresse. Der Operationsteil (OP) Der Operationsteil setzt sich aus einer Reihe von Buchstaben zusammen. Die Reihenfolge dieser Buchstaben ist beliebig. Es kann extern der Interncode benutzt werden. Es sind aber folgende Abkürzungen erlaubt: Abk.
für
Abk.
für
B NA L LLR 0 QK T NU J S AS GKC F EF JC GC K kann unter Umständen (vgl. 1.2) fortgelassen werden. Die Abkürzungen für die verschiedenen G-Kombinationen haben wir seinerzeit eingeführt, um den Umgang mit diesen etwas komplizierten Befehlen möglichst zu vereinfachen. Die Berechtigung, diese Abkürzungen zu benutzen, haben wir in der Bemerkung zu Bit 19 des Interncodes auf S. 122 nachgewiesen. Allerdings ist auf diese Weise nicht die Darstellung aller intern vorkommenden Varianten möglich. Daher werden die hier aus didaktischen Gründen eingeführten Abkürzungen in den verschiedenen Standard-Leseprogrammen, die für die Z 22 erstellt worden sind, nicht realisiert. Sondern es werden auch extern die vollständigen G-Kombinationen notiert, wobei allerdings unter Umständen das K entfallen kann (siehe 1.2). Der
Adressenteil
Jeder gewöhnliche Befehl hat mindestens eine Adresse. (Die Adresse Null oder wirkungslose Adressen werden durch die Ziffer 0 bezeichnet.)
Die externe Notierung von Zahlen und Befehlen für die Z 22
125
Ist nur eine Adresse vorhanden, so reagiert das Leseprogramm folgendermaßen : Ist die Adresse kleiner als 32 und enthält der Operationsteil kein G, so wird sie als Schnellspeicheradresse gedeutet, und es wird ein K in OP eingefügt. Ist die Adresse größer oder gleich 32, oder ist in OP ein G enthalten, so wird die Adresse als Trommelspeicheradresse gedeutet. Sind zwei Adressen vorhanden, so muß die Schnellspeicheradresse vor der Trommelspeicheradresse stehen und von dieser durch ein , , + " oder ein ,,—" getrennt sein. Sind die Adressen durch ein , , + " getrennt, so werden die Adressen als Trommel- und Schnellspeicheradressen in den Befehl eingesetzt (Disjunktion zweier Speicherinhalte, G, J). Sind die Adressen durch ein ,,—" getrennt, so wird die Schnellspeicheradresse um eins erniedrigt und das Komplement der Trommelspeicheradresse zu Zählzwecken eingesetzt. Enthält der Operationsteil ein G oder J, so wird die Schnellspeicheradresse unverändert übernommen und ebenfalls das Kompliment der Trommelspeicheradresse eingesetzt. Zi ist innerhalb der Adressen wirkungslos. 10.22 Funktionsbefehle
Es sind unter anderem folgende Punktionszeichen vorgesehen: Zeichen
Bedeutung
+
Addition Subtraktion Multiplikation Division Wurzelziehen Multiplikation mit (—1) Drucken 1 )
—
X : W M D
• in gleitendem Komma
Das Leseprogramm setzt für jeden Funktionsbefehl einen Rufbefehl Fn ein. n ist die Aufrufadresse des zugehörigen Unterprogramms, durch welche die angegebenen Funktionen realisiert werden. Später bei der Ausführung des gespeicherten Programmes wird also nur dann, wenn ein an Stelle des ') Soll die Maschine in der Extern-Form drucken, so muß ein dem Leseprogramm analoges Druckprogramm vorgesehen werden. Die Druckanordnung wird durch besondere Parameter festgelegt (vgl. [22]).
126
Ein Externcode für die Z 22 und seine Beziehung zum Interncode
Funktionsbefehls stehender Rufbefehl Fn vorliegt, das Programm verlassen und das Unterprogramm aufgesucht, das die Funktionen realisiert. Dann wird auf das eigentliche Programm zurückgesprungen. Daher benutzen alle Rufbefehle den Schnellspeicher 5. Tritt bei einer Operation eine Bereichsüberschreitung auf, so druckt das Leseprogramm BUEB E s + t . Dabei gibt die Adresse an, an welcher Stelle des übergeordneten Programmes fortgefahren werden muß. Tritt insbesondere während der Eingabe eine Bereichsüberschreitung auf, lautet die Adresse 0 + 1 9 8 . In diesem Falle muß im Leseprogramm bei Befehl 198 weitergearbeitet werden. 10.28 Bandbetehle
Bandbefehle sind Anweisungen, die auf dem Band unmittelbar hinter einem Befehl stehen. Sie folgen dem Befehl ohne Zw. Es sind folgende Bandbefehle vorgesehen: A (bei 1-Adreßbefehlen) E T An bewirkt, daß < w > zu der Adresse des zugehörigen Befehls addiert wird. Danach wartet das Leseprogramm mit der Speicherung auf weitere Bandbefehle bzw. auf das Schlußzeichen Zw oder ZI. n wird wie bei gewöhnlichen Befehlen je nach Größe als Schnellspeicher- oder Trommeladresse gedeutet. E bewirkt, daß der zugehörige Befehl nicht gespeichert, sondern sofort ausgeführt wird. T bewirkt, daß der zugehörige Befehl nach Schnellspeicher 13 gebracht wird. E und T wirken als Schlußzeichen. 10.24 Dezimalzahlen
Gleitendes Komma Das Leseprogramm liest Dezimalzahlen vom Lochstreifen, übersetzt sie in das Dualsystem und speichert sie in gleitendem Komma. Die Dezimalzahlen dürfen höchstens neun wesentliche Ziffern enthalten. Die Stellung des Kommas ist beliebig. Positiven Zahlen kann ein Pluszeichen, negativen Zahlen muß ein Minuszeichen vorangestellt werden. Hinter der eigentlichen Dezimalzahl (Mantisse) kann auf dem Lochstreifen noch ein Skalen-
Die externe Notierung von Zahlen und Befehlen für die Z 22
127
faktor (Exponent) folgen. Dieser Skalenfaktor ist eine Zehnerpotenz, von der nur der Exponent notiert wird. Mantisse und Exponent werden durch einen Schrägstrich getrennt. Die Exponenten sind ganze Dezimalzahlen. Positiven Exponenten kann, negativen Exponenten muß das Vorzeichen vorangestellt werden. B e i s p i e l : 87,349/-9 steht für 87,349-10- 9 . Treten bei der Eingabe unzulässig große Zahlen auf, so stoppt die Maschine und schreibt: B U E B E 0 + 1 9 8 (siehe 10.22). Innerhalb des Wortes (Mantisse/Exponent) darf weder Zw noch ZI geschrieben werden. Schlußzeichen für Dezimalzahlen ist ein nachfolgendes Zw oder ZI. Zi ist unwirksam. Festes Komma Das Leseprogramm liest Dezimalzahlen vom Lochstreifen, übersetzt sie ins Dualsystem, multipliziert sie mit 2 - 3 8 und speichert sie in festem Komma. Dezimalzahlen, die vom Leseprogramm auf diese Weise verarbeitet werden sollen, erhalten am Schluß ein Apostroph. Es werden nur ganze Dezimalzahlen verarbeitet. Das Vorzeichen wird wie bei den Gleitkommazahlen behandelt. Die Festkomma-Dezimalzahlen müssen dem Betrage nach kleiner als 2 36 sein. Für Bereichsüberschreitimg und Schlußzeichen gilt das für Gleitkommazahlen Gesagte. 10.25 Klartext
Das Leseprogramm verarbeitet alle Buchstaben, Ziffern und Betriebszeichen des internationalen Fernschreibalphabets als Klartext. J e sieben Zeichen bilden ein Klartextwort. Vor dem Anfang und hinter dem Ende eines Klartextes muß je ein Klingelzeichen gesetzt werden. Das Klingelzeichen wird nicht mitgespeichert. Das siebente Zeichen bzw. ^ gelten jeweils als Schlußzeichen für ein Klartextwort. 11 Eine Programm- und Adressen-Organisation In Kapitel 4 haben wir zur Erleichterung der Programmierung symbolische Adressen eingeführt und angemerkt, daß wir noch Programmmethoden angeben werden, um die endgültige Zuordnung zwischen Adressensymbol und wirklicher Adresse herzustellen. Es ist üblich, dies in der Weise zu machen, daß beim Einlesen der Programme mit Hilfe eines besonderen „Adressierprogrammes" alle auf-
128
Eine Programm- und Adressen-Organisation
tretenden Adressensymbole nach folgendem Schema registriert und gegebenenfalls durch die echte Adresse ersetzt werden [23]. Tritt beim Lesen ein Adressensymbol auf, mit dessen Hilfe ein Wort benannt werden soll (bei uns also ein links neben einem Wort stehendes Adressensymbol), so wird dieses Symbol mit der in diesem Augenblick notwendigerweise bekannten echten Adresse des gekennzeichneten Wortes in einer Adressenliste vermerkt. Tritt dagegen ein Adressensymbol im Adressenteil eines Befehles auf, so wird in der Adressenliste nachgesehen, ob die zugehörige Adresse bereits bekannt ist (oder mit anderen Worten, ob dieses Adressensymbol schon einmal als Kennzeichen aufgetaucht ist). Ist dies der Fall, so wird die Adresse eingesetzt und der Befehl gespeichert. Im anderen Fall wird der Befehl vorläufig ohne Adresse gespeichert und in einer zweiten Liste, der sogenannten Vormerkliste, werden das Symbol und die Adresse des gespeicherten Befehls notiert, damit später, wenn die Zuordnung Symbol/Adresse bekannt ist, dieser Befehl noch mit seiner Adresse versehen werden kann. Dieses einfache Schema kann noch in folgender Weise ausgebaut werden [24]. 1. Die Vormerkliste kann eingespart werden, indem die leeren Adressenteile der noch unvollständigen Befehle zur Aufnahme bestimmter Informationen herangezogen werden. 2. Durch geeignete Symbole und ein vom Programmierer vorbereitetes Zuordnungsschema können auch Bezüge, die über ein Programm hinausgehen, adressenlos erfaßt werden. Verwendet man das oben angegebene einfache Schema für Bezüge zwischen verschiedenen Programmen (also etwa zum Aufruf eines Programmes B innerhalb eines Programmes A), so ergeben sich folgende Schwierigkeiten: Bei einer vernünftigen Unterprogrammtechnik muß angenommen werden, daß die innerhalb des Programmes stehenden Angaben nicht verändert werden. Wenn also innerhalb eines Programms (A) mit Hilfe einer symbolischen Adresse ein Wort aus einem anderen Programm (B) aufgerufen werden soll, das durch das gleiche Symbol gekennzeichnet ist, so muß dieser Bezug notwendig starr und unveränderlich sein. Das heißt, wir können — wenn wir keine Mehrdeutigkeit zulassen wollen — mit dem Befehl aus A immer nur das Programm B anrufen. Eine solche starre
Eine Programm- und Adressen-Organisation
129
Kopplung zwischen A und B widerspricht aber dem eigentlichen Sinn der Unterprogrammtechnik, bei der die Programme auch frei kombinierbar sein sollen. Die freie Kombinierbarkeit erfordert, daß Adressen, die sich auf Punkte außerhalb eines Programmes beziehen, besonders gekennzeichnet werden und daß auf geeignete Weise festgelegt wird, auf welche Programme (oder allgemeiner auf welche Wortfolgen) sich diese Adressen beziehen. Am besten geht man dabei in der Weise vor, daß bei den Adressen, die sich nach außen beziehen, zwischen festen und frei wählbaren Bezügen unterschieden wird. Feste Bezüge werden schon bei der Programmherstellung festgelegt. So wird z . B . bei der Berechnung von sinha; stets die Exponentialfunktion benötigt. Der Sprung auf das Programm zur Berechnung von ex kann also (wenn man auf die Freiheit, nach Bedarf verschiedene exProgramme zu benutzen, verzichten will) schon bei der Herstellung des Programms für sinha; explizit angegeben werden. Am besten wird als Sprungadresse die Bibliotheksnummer des e*-Programmes gewählt. Frei wählbare Bezüge werden bei Programmen noch offen gelassen. Sie werden erst bei der Zusammenstellung eines Programmsystems aus mehreren Einzelprogrammen durch die Erstellung eines „Zuordnungsschemas" nach Bedarf festgelegt. Damit besteht die Möglichkeit, bequem Rahmenprogramme, wie ein Programm „Runge-Kutta" (vgl. S. 87) zur Lösung der Differentialgleichung y' = f(x,y) unabhängig von f(x,y) herzustellen. Selbst wenn f(x,y) festliegt (also etwa f(x,y) = sin (x-\-yj), können immer noch verschiedene Programme zur Berechnung von f{x,y) (also im Beispiel von S. 87 etwa verschiedene sin-Programme) herangezogen werden; denn für die numerische Verfahrenstechnik ist nicht die mathematisch definierte Funktion einzig wesentlich, sondern das Programm, das durch die Funktion nicht eindeutig definiert wird, sondern von Verfahrensgrößen, insbesondere von dessen Fehlerverhalten, abhängt. In der Praxis des Berufsprogrammierers bringt die freie Kombinierbarkeit bei sämtlichen Bezügen nach außen, insbesondere bei Aufstellung und Zusammensetzung von Bibliotheksprogrammen, zuweilen solche Unbequemlichkeiten, daß man häufig auf die freie Kombinierbarkeit nur an Stellen eingeht, wo sie unbedingt erforderlich ist. Man verzichtet damit auf die systematischen und prinzipiellen Vorteile der freien Kombinierbarkeit und hat so Starrheiten im Programmsystem, die sicherlich unerwünscht sind. Das beste ist sicher eine gemischte Organisation, die den Vorteil des festen Außenbezuges bei den Routinebibliotheksprogrammen 9
GüntscU, Digitale Rechenautomaten
130
Eine Programm- und Adressen-Organisation
verbindet mit der Flexibilität, die sieh aus der freien Wählbarkeit des Bezuges für Haupt- oder Oberprogramme ergibt, Wir wollen hier eine solche kombinierte Programm- und Adressenorganisation etwas ausführlicher schildern:
11.1 Allgemeine Beschreibung a) Jedes Programm (und jede Zahlenfolge) enthält eine eigene (willkürliche) Katalognummer p{. b) Jedem Programm p( stehen die folgenden Adressensymbole zur Verfügung : (k) m ( Z k ) .
Dabei sind für k beliebige positive, ganze Dezimalzahlen zugelassen. Die (k) dienen zur Kennzeichnung von Beziehungen innerhalb des Programmes, während (Fk) einen festen Bezug zu einem anderen Teilprogramm kennzeichnen. Als k wird in diesem Fall die Katalognummer p( dieses Teilprogrammes benutzt. Die (Zk) vermitteln einen frei wählbaren Bezug, der mittels eines Zuordnungsschemas in jedem Anwendungsfall nach Bedarf festgelegt werden kann. Die k werden hier laufend durchnumeriert. c) Soll ein Wort von Befehlen erreichbar sein, die als Adresse (k) tragen, so wird diesem Wort das Adressensymbol (k) vorangestellt. d) Das Adressierprogramm richtet zur Verarbeitung der (k) während der Eingabe eines jeden Programms p{ eine „Liste" (in den Speicherzellen i —f-1, l - \ - 2 . . . l - \ - k , . . . l - \ - L ) ein. Der Programmierer hat damit nichts zu tun. Er muß dem Adressierprogramm lediglich ein hinreichend großes L benennen, damit allen Symbolen (k) eine Listenposition l -\-k zugewiesen werden kann. e) Das Adressierprogramm richtet zur Verarbeitung der (Zk) ein Zuordnungsschema ein, aus dem ersichtlich ist, auf welche Programme oder Zahlenfolgen pik sich ein mit dem Adressensymbol (Zk) versehener und im Programm pt befindlicher Befehl bezieht. Alle für dieses Zuordnungs-
Aufmachung der Programme
131
Schema nötigen Angaben muß der Programmierer vor der Eingabe der eigentlichen Programme per Lochstreifen eingeben. f) Alle nach außen gerichteten Befehle (Adressen ( F k ) und (Zlc)) beziehen sich auf das erste Wort der angesprochenen Wortfolge. Soll (etwa mit einem Befehl x) ein anderes Wort (etwa das (n -j-l)-te Wort) aufgerufen werden, so muß die Befehlsfolge BC
(Fk)
bzw.
BC
(Zk)
T s xO
s +
w
angewendet werden. 11.2 Aufmachung der Programme I m folgenden bedeutet: m
Die Anfangsadresse für das Programmsystem px ... (einschließlich Liste und Zuordnungsschema).
pn
(Z)
Ein Bandbefehl, der bewirkt, daß anschließend das auf dem Lochstreifen folgende Zuordnungsschema gelesen wird.
L
Die größte der in den Programmen p1 ... längen.
Pi
Katalognummer der Programme bzw. Zahlenfolgen.
Pih
Die Katalognummer des im Programm p t in den Befehlen mit der Adresse (Zk) angesprochenen Programmes.
(Lp,)
Ein Bandbefehl, der bewirkt, daß die Anfangsadresse des folgenden Programms p{ im Zuordnungsschema vermerkt und anschließend weiter gelesen wird.
pn benötigten Listen-
(Spi) Ein Bandbefehl, der bewirkt, daß anschließend auf den ersten Befehl des Programms pt gesprungen wird. Die Programme müssen in folgender Form auf dem Lochstreife Q erscheinen 1 ) : *) Falls bei der Programmierung überwiegend feste Zuordnungen {Fk) auftreten, ist das Zuordnungsschema kaum besetzt. Es ist daher zu überlegen, ob man in diesem Fall den Programmierer nicht der Mühe entheben kann, die Nummern der beteiligten Programme vorweg einzugeben. Das kann dadurch geschehen, daß man die Listen der beteiligten Programme genau wie die Listen für die (k) vom Adressierprogramm selbst anlegen läßt, indem man entweder vorweg analog zu L die Anzahl der beteiligten Programme angibt oder nur einen festen und hinreichend großen Platz für diese Listen freiläßt. (Der letzte Weg ist im sogenannten Berliner-Code ([11]) beschritten worden.) Vom Zuordnungsschema würde dann 9*
132
Eine Programm- und Adressen-Organisation
TmT (Z) IPl>
L
P i i . Pl2>
• • •
Pl rJPi'
Pil>
2>22> • • •
PzrJ---¡Pn>
Pnl'Pni'
Pnrn
tfPl)
Programm (bzw. Zahlenfolge) p1
(Lp,) Programm (bzw. Zahlenfolge) p2
{Lpn)
Programm (bzw. Zahlenfolge) p„ (Spd Die Reihenfolge der Programme ordnungsschema übereinzustimmen.
braucht nicht mit der der
im Zu-
11.3 Ein Programm-Beispiel Wir wollen hier als Beispiel die Berechnung einer Sinus-Tabelle analog zu dem Beispiel von S. 102 ausführen. Über die Schnellspeicherverteilung sollen die dort gemachten Verabredungen gelten. jeweils vorweg nur der Teil notiert, in dem tatsächlich freie Zuordnungen vermittelt werden. Das h e i ß t , in dem oben angegebenen Beispiel (11.3) würde statt des Zuordnungsschemas 4 / 81, 31, 97, 29 / 29 / 31 / 97 ein verkürztes Schema 4 I 81, 31, 97, 29 genügen. I n vielen Fällen könnte das Zuordnungsschema vollkommen entfallen. Eine andere Möglichkeit, die freien Bezüge zu realisieren, besteht darin, in den Programmen grundsätzlich feste Bezüge (Fk) zu verwenden, das Adressierprogramm aber in die Lage zu versetzen, ein Zuordnungsschema zu lesen, in dem Angaben darüber enthalten sind, welche Bezüge geändert werden sollen. Das Zuordnungsschema enthält also Ersatzanweisungen für ursprünglich feste Bezüge ([25]).
Ein Programm-Beispiel
133
Die Argumente xf und die berechneten Funktionswerte sin x¡ sollen wie folgt gespeichert werden: {«11
11
(1) 6 11+0 3
Parameter für „Hornersches Schema"
P(x 2 )->6 x • P(x2) -> 4,6 II
x-P(x2)
=>S(x) =#• „Sin"
11+0 4
11+1
II
Rücksprung in das übergeordnete Programm
Eine Programm- und Adressen-Organisation
136 Programm:
„Hornersches Schema", Nr. 13
L = 2 Benötigt als Parameter: 1. x 2. B {an} 3. — n' 5 11
B T GB
(2)
X JB
+
Pn
6
—{i—iy
1 11+2
CA GU QQE
GE
an
11+2
Z
\\Z
2, (1)
2—1
GB
B GT
B{a„}-+
6 11+0
\\Z
WZ
Ablaufnotierung -»• 11
2+(l)
u * T GB
\\
o II 1] II 2 II o] II 3 II 4 II H+1
T (1)
|
—i' < 0
(2)
6 11+0
5
II
11+3
J
Sprung nach (3)
P («)->{«} Rückspnmg in das übergeordnete Programm
11.4 Zur Arbeitsweise des Adressierprogramms Das Adressierprogramm ist eine Ergänzung des normalen Leseprogrammes. Es wird immer dann aufgerufen, wenn das Leseprogramm ein Zeichen " ( " vorfindet, das heißt, wenn bei der vorgesehenen Programmaufmachung ein (Z), (Lp,), (Spi), (k), (Fk) oder (Zk) vorhegt.
Zur Arbeitsweise des Adressierprogramms
137
Bei (Z) baut das Adressierprogramm im Speicher das Zuordnungsschema aus den auf das (Z) folgenden Angaben L
IPl> Pll. Pl2 ••• PlrJPz, Pii. P22 ••• PirJ • • • lp„, Pn 1 • • • Pnrn
in folgender Form auf: —PilOlPnM•
• -IPirJ—Pj0jp21...
piTJ—pJOlpnl...
pnrn.
Außerdem stellt es die laufende Speicheradresse m um L Stellen weiter, so daß hinter dem Zuordnungsschema für die Liste Platz geschaffen wird. Die Funktionen des Adressierprogrammes beim Auffinden von (Lpt), (Spi), (k), (Fk) und (Zk) sind in dem am Schluß beigefügten Flußdiagramm zusammengestellt. In diesem Flußdiagramm sind sechs Eingänge vom Leseprogramm in das Adressierprogramm gezeigt. Sie entsprechen den Symbolen (Sp), (Zk), (Fk), (Lp) und (k). Bei (k) wird allerdings zwischen (ka) und (kv) unterschieden. (ka) bedeutet ein (k) im Adressenteil eines Befehls, und (k„) ein (k), das vor einem Wort steht und dieses kennzeichnet. Hat das Leseprogramm (kv) vorgefunden so, sucht es in der Liste die Position l-\-k = lk auf und prüft, ob dort eine Null steht oder nicht. Eine Null bedeutet, daß noch kein (ka) (fc„) aufgetreten ist, daß also noch keine Vormerkung für dieses (kv) vorliegt. In diesem Falle wird die laufende Speicheradresse m des bei (kv) stehenden Wortes in eingesetzt. Dann wird wieder das Leseprogramm aufgesucht. Dort wird das Wort nach m gespeichert und weiter gelesen. Findet das Leseprogramm ein (kv), so wird das Adressierprogramm über den entsprechenden Eingang aufgesucht. Dort wird die Listenposition l-\-k — lk aufgesucht und geprüft, ob darin eine Null steht oder nicht. Ist vorher bereits ein (kv) — (ka) dagewesen, so enthält wie wir gesehen haben, die (positive) Adresse des zugehörigen Wortes. Diese kann dort entnommen und in den Adressenteil des laufenden Befehls eingesetzt werden. Darauf erfolgt die Rückkehr zum Leseprogramm, wo der laufende Befehl in seiner endgültigen Form nach m gespeichert wird. Etwas komplizierter ist der Ablauf, wenn bei Auftreten von (ka) in lk noch keine Adresse des zugehörigen (kv) abgelegt ist. Dort ist dann eine Null. In diesem Fall kann dem Befehl noch keine Adresse mitgegeben werden. Es wird aber in der Liste bei l k vermerkt, daß dieser Befehl später, wenn das entsprechende (k)0 gelesen worden ist, noch mit einer Adresse versehen werden muß. Zu diesem Zweck wird — m nach l k geschrieben.
138
Eine Ptogtamm- und Adressen-Organisation
Der Befehl selbst erhält eine Null im Adressenteil und wird vom Leseprogramm gespeichert. Trifft das Leseprogramm abermals auf das gleiche (ka), ohne daß das entsprechende (kv) vorgelegen hat, so zeigt der negative Inhalt von l k an, daß bereits eine Vormerkung vorliegt. Die in l k enthaltene Zahl führt auf einen Befehl, dessen Adressenteil, wie wir gesehen haben, eine Null enthält. Die Adresse dieses Befehls wird nun aus l k entnommen und negativ in den Adressenteil des laufenden Befehles eingeschrieben, während die Adresse des laufenden Befehles m negativ nach lk geschrieben wird. Liegen mehrere Vormerkungen für ein (kv) vor, so gibt der negative Inhalt von l k jeweils an, daß Vormerkungen vorliegen, während die negativen Adressenteile der Befehle darauf hinweisen, daß — und wo — weitere Befehle vorhanden sind, die beim Auftreten des (kv) mit der endgültigen Adressen versehen werden müssen. Der letzte Befehl dieser Vormerkkette enthält im Adressenteil eine Null. Tritt dann (kv) beim Lesen auf und findet das Adressierprogramm in l k eine negative Zahl vor, so kann es durch die negativen Adresseiiteile die ganze Vormerkkette durchlaufen und in allen beteiligten Befehlen die endgültige Adresse m einsetzen. Dieses Wechselspiel von Anlegen und Abarbeiten der Vormerkungen bei Auftreten von (ka) und (kv) tritt in ähnlicher Form auf, wenn (Fk) oder (Zk) bzw. (Lp) vorgefunden wird. Allerdings wird hier nicht die „Liste" benutzt, sondern bestimmte Positionen des Zuordnungsschemas. Bei (Fk) wird im Zuordnungsschema das (negativ notierte) Pj = k aufgesucht und die folgenden, anfangs leer gelassenen Speicherzellen als l k benutzt. Dann wird nach dem gleichen Schema verfahren wie bei (ka). Bei (Zk) wird erst im Zuordnungsschema die (k + l)-te Stelle hinter der (negativ notierten) Nummer p, des gerade gelesenen Programms die Nummer pjk des mit der Adresse (Zk) angesprochenen Programms ermittelt. Dieses neue p wird dann im Zuordnungsschema herausgesucht. Dabei werden nur die negativ notierten pj durchsucht. Ist das richtige p gefunden, so wird wie bei (Fk) die folgende Speicherzelle als lk benutzt, und es wird für das Tätigen und Abarbeiten von Voranmeldungen verfahren wie bei (ka) beschrieben. Bei (Lp) wird die Liste gelöscht und es kann wie bei (kv) das Abarbeiten etwa vorhandener Voranmeldungen (Fk) oder (Zk) beginnen. Auf jeden Fall wird die Anfangsadresse des neuen Programmes p, hinter den (negativ notierten) Nummern p, im Zuordnungsschema (positiv) notiert, so daß sie
Zur Arbeitsweise des Adressierprogramms
139
bei weiteren (Fk) oder (Zk), die sich auf dieses p beziehen, zur Verfügung steht. Trifft das Adressierprogramm auf (Sp), so wird im Zuordnungsschema (wieder unter den negativ notierten Pj) das richtige p herausgesucht und aus der darauffolgenden Zelle die dann notwendig bereits vorhandene Adresse des zugehörigen Programms entnommen. Es erfolgt dann ein Sprung auf diese Adresse und die eigentliche Rechnung beginnt. Neben den im Flußdiagramm angeführten Hauptfunktionen enthält das Adressierprogramm noch gewisse Prüfteile, in denen Formfehler wie unerledigte Voranmeldungen und Mehrdeutigkeiten der Adressierung aufgedeckt und in geeigneter Form — z. B. durch Ausdrucken — angezeigt werden. Als Ergänzung zu dem oben Gesagten fügen wir für ein Beispiel eine ausführliche Speichertabelle bei. Dieses Beispiel ist in bezug auf die Einzelbefelile willkürlich, schließt sich aber in Hinsicht auf die Nummern der Programmteile und ihre gegenseitige Zuordnung an das Beispiel von (11.3) an. In der Speichertabelle sind jeweils links neben den senkrechten Doppelstrichen die Speicherstellen notiert, während rechts daneben in jeder Zeile von links nach rechts mit fortschreitender Eingabe der Inhalt des Adressenteils der einzelnen Speicherstellen eingesetzt ist. Um die Tabelle nicht übermäßig anwachsen zu lassen, sind von jedem Programmteil nur Anfangs- und Schlußwort, sowie alle die Wörter aufgeführt, die (vorn oder im Adressenteil) ein Adressensymbol enthalten. Außerdem sind von den aufgeführten Befehlen nur die Adressenteile notiert und diese auch nur dann, wenn sie aus einer symbolischen Adresse bestehen. Die oberste Zeile gibt rechts neben dem Doppelstrich den jeweiligen Stand der Eingabe an. Durch diese Tabelle wird deutlich, wie durch die laufende Notierung von Vormerkungen in den Adressenteilen der Befehle, deren Adresse noch nicht endgültig eingesetzt werden kann, die Vormerkliste eingespart wird.
Flußdiagramm zun
Güntsch, Digitale Rechenautomaten
n Adressierprogramm
Speichertabelle
Speicherbesetzung im Laufe der Eingabe Zuordmmga(L 81) Schema
2000 1 2 3 4 5 6 7 8 9 10 11 2012 1+ + + 1+
1 2 3 4
2013 14 15 2016
2017 18 20 24 (2) 28 30 31 (1) 32 2036
— 81 0 31 97 29 — 29 0 — 13 0 — 31 0 — 97 0
—A Pn Pia Pia — Pa — P3 ~~Pi — Pf,
2018
2020
2024
(Z 3) (ZI) (Z 2) (z 3) (i) (Z 3)
£ £ « a § gj
(2)
£
2030
2031
—2018
-2028
2036
-2031
(L 29)
204
2037
-2020 -2024 2028
0
0
-2030
2032
0 0 0 0
-20 20
2037 0
2018
0
2028
2037
2022
2037 2036
2037 40 43 45 47 48 (1) 49 50 (2) 51 52 54 (4) 56 2058 (3)
Güntsch, Digitale Rechenautomaten
2032
2017
0 0 0 0
Liste
2028
(2) (D (2) (3) 13) (3) (4) (4) (3) (1)
0 o n M * | I g, i *
0
2043
2045
2047
2048
2049
2050
2051
2052
2054
2056
-2048
(LIS)
2061
2062
2064
2065 (L31)
(L 97)
2059 2071 2171 2049
-2045
2051 2056
-2050 -2051
0 0 0 0
- 2 0 6 1 2062
0 0 0 0
2064
2071
2040
0
2040
0 0 0 0
2171
2051
2049
2051 2059 0
2050
2040
2059 61 (1) 62 (2) 64 65 2070
2056 2056 2049
Programm Nr. 13
2040
^
0
'S
to 40
-2043
0
2062 2062 2064 2071 2170
Tabelle Nr. 31 2071 2170
Tabelle Nr. 97
Literatur Bücher über die Programmierung digitaler Rechenautomaten: K. H. V. Booth, Programming for an automatic digital calculator. Butterworths Scientific Publications, London (1958). A. W. Burks, H. H. Goldstine, J. von Neumann, Planning and coding of problems for an electonic computing instrument. The Institut of Advanced Studies (1947/48), 160 S. J. Jeenel, Programming for digital computers. McGraw-Hill (1959), 517 S. D. D. McCracken, Digital computer programming. John Wiley & Sons, Chapman & Hall (1957), 253 S. D. D. McCracken, H. Weiss, T.-H. Lee, Programming Business Computers. John Wiley and Sons (1959), 500 S. B. Thüring, Einführung in die Methoden der Programmierung kaufmännischer und wissenschaftlicher Probleme für elektronische Rechenanlagen. Göller-Verlag, Baden-Baden (1957), Bd. I. B. Thüring, Automatische Programmierung, dargestellt an der Univac-Factronic. Göller-Verlag, Baden-Baden (1958), Bd. II, 168 S. M. V. Wilkes, D. J. Wheeler, 8. Gill, The preparation of programs for an electronic computer. Addison-Wesley Press, Inc., Cambridge 42, Mass. (1951), 167 S.
Im Text zitierte Literatur: [1] K. Zuse, Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch kombinativer Aufgaben. Arch. Math. 1 (1948), S. 441—449. [2] H. Butishauser, Automatische Rechenplanfertigung bei programmgesteuerten Rechenmachinen. Mitteilungen aus dem Institut für angew. Mathematik der ETH Zürich, Nr, 3 (1952). [3] E. Stiefel, Über einige Methoden der Relaxationsrechnung. ZAMP 3 (1952), S. 1—33. [4] K. Samehon, F. L. Bauer, Optimale Rechengenauigkeit bei gleitendem Komma. ZAMP 4 (1953), S. 312—316. [5] A. W. Burks, H. H. Goldstine, J. vcm Neumann, Planning and coding of problems for an electronic computing instrument. Herausgeber: The Inst. Advanced Study (1947/48). [6] M. V. Wilkes, D. J. Wheeler, S. Gill, The preparation of programs for an electronic computer. Addison-Wesley Press, Inc., Cambridge 42, Mass. (1951), 167 S. [7] H. Schecher, Maßnahmen zur Vereinfachung von Rechenplänen bei elektronischen Rechenanlagen. Diss. TH München (1955).
142
Literatur
[8] F. L. Bauer, Einführung in den Gebrauch programmgesteuerter Rechenanlagen. Vorlesung an der T H München WS (1955/56). [9] N. Rochester, Symbolic programming. Trans. I R E , EC-2 (1953), S. 10—15. 10] F. R. Güntsch, Logischer Entwurf eines digitalen Rechengerätes mit mehreren asynchron laufenden Trommeln und automatischem Schnellspeicherbetrieb. Diss. T U Berlin (1957). 11] K. Friedrich, Das „Berliner Organisationsprogramm" f ü r die Z 22. Druckschrift aus dem Recheninstitut der Technischen Universität Berlin (Juli 1959), 7 S. 12] W. Kuzenko, Eine Programmorganisation für die S 2002. Elektronische Datenverarbeitung, Folge 4, Vieweg-Verlag, Braunschweig (Dez. 1959), S. 10—13. 13] H. Posch, Th. Fromme, Programmorganisation bei kleinen Rechenautomaten mit innerem Programm. ZAMM 34, 8/9 (1954), S. 307—308. 14] V. M. Wolontis, A complete floating decimal interpretive system for t h e I B M 650 magnetic drum calculator. IBM Appl. Sc. Div. Techn. Newsletter 11 (März 1956), 84 S. 15] Fortran, Fortran, programmers reference manual automatic coding systems for t h e IBM 704. Druckschrift der IBM (1956). 16] A. J. Perils, K. Samelson, Report on t h e algorithmic language ALGOL. N u m . Math. 1 (1959), S. 41—60. 17] H. Bottenbruch, Übersetzung von algorithmischen Formelsprachen in die Programmsprachen von Rechenmaschinen. Zeitschrift f ü r mathematische Logik u n d Grundlagen der Mathematik (1958), Bd. 4, S. 180—221 (Diss. Darmstadt). 18] F. R. Güntsch, Über digitale Speziclrechner. Telefunkenzeitung 33 (1960) H e f t 127 S. 4—12. 19] Scott, Automatic preparation of flow chart listings. Journal of t h e Association for Computing Machinery (1958), S. 57—66. 20] W. L. van der Poel, A simple electronic digital computer. Appl. Scientific Research; Sect. B, Vol. 2 (1952), S. 367—400. 21] W. L. van der Poel, The logical principles of some simple computers. Diss. Amsterdam (1956). 22] K. Friedrich, Die Ausgabe von Befehlen und Programmen bei der Z 22. Druckschrift aus dem Recheninstitut der Technischen Universität Berlin (Sept. 1959), 6 S. 23] Th. Fromme, Ein Adressierprogramm für die Z 22. Elektronische Datenverarbeitung, Folge 1, Vieweg-Verlag, Braunschweig (1959), S. 49—52. 24] F. R. Güntsch, W. Kuzenko, Programm- und Adressenorganisation f ü r die Z 22. Druokschrift Recheninstitut TU Berlin (1957), 21 S. 25] G. Bruhn, Eine Ergänzung des Berliner Organisationsprogramms. Druckschrift aus dem Recheninstitut der Technischen Universität Berlin (April 1960), 2 S.
MANAGEMENT DICTIONARY Fachwörterbuch für Betriebswirtschaft, Wirtschafts- und Steuerrecht und Lochkartenwesen von WERNER
SOMMER
und H A N N S - M A R T I N
SCHÖNFELD
mit einem Geleitwort von Prof. C. A. M o y e r , University of Illinois, U . S. A.
ENGLISCH-DEUTSCH Taschen-Oktav. 176 Seiten. 1960. Plastik-Einband D M
12,—
Gerade im Wirtschaftsverkehr zwischen anglo-amerikanischen Ländern und Deutschland zeigen sich gelegentlich sprachliche Unsicherheiten, die nicht zuletzt auf
den
Mangel an einem geeigneten Orientierungsmittel zurückzuführen sind, das die meisten und gebräuchlichsten Fachausdrücke durch Gegenüberstellung klärt. Ähnliches gilt für die notwendige Lektüre der Fachliteratur in Forschung und Praxis. Das
MANAGEMENT
DICTIONARY
leistet
hier wertvolle
Hilfe.
Mit
nahezu
8000 Wörtern enthält es die gesamte für die Betriebsführung erforderliche Terminologie und wird Wissenschaftlern und Studenten, Betriebspraktikern in Handel und Industrie, Wirtschaftsprüfern,
Steuerberatern
wie
überhaupt
allen
im
Wirtschafts-
leben Stehenden von größtem Nutzen sein. Aus den
ersten
Beurteilungen:
„Dieses handliche englisch-deutsche Wörterbuch für die im Titel erwähnten Fachgebiete g e h ö r t m i t i n d i e e r s t e R e i h e d e r Fachwörterbücher, denn es beruht wirklich auf Sachkenntnis und entgeht daher im allgemeinen der großen Gefahr, bloß zu ,übersetzen', wo sachlich entsprechende Fachausdrücke vorhanden sind. . . . Dem zuverlässigen kleinen Werk ist in den interessierten Kreisen eine weite Verbreitung zu wünschen." Bücher für die Wirtschaft, Referentenblatt des Deutschen Industrieinstituts In
Vorbereitung:
MANAGEMENT Ein
DICTIONARY,
ausführlicher
WALTER
Prospekt
DE
mit Probeseite
GRUYTER
DEUTSCH-ENGLISCH steht
zur
Verfügung.
& CO., B E R L I N
W35
vormals G. J . Göschen'sciie Verlagshandlung — J . Guttentag, Verlagsbuchhandlung — Georg Reimer — Karl J . Trübner — V e i t & Comp.
Wer nicht verschwenden will, muß rechnen. Wer seinen Betrieb erfolgreich führen will, muß die Gesetze der Kostenentwicklung kennen
....
das lehrt das Standardwerk über die Kosten des Betriebes: Prof. Dr. K O N R A D MELLEROWICZ
Kosten und Kostenrechnung Band I: Theorie der Kosten 3., veränderte Auflage. Groß-Oktav. VIII, 530 Seiten. 1957. Ganzleinen DM 30 —
Band II: Verfahren 2./3., völlig umgearbeitete Auflage. Groß-Oktav.
1. Teil: Allgemeine Fragen der Kostenrechnung und Betriebsabrechnung X V I , 493 Seiten. 1958. Ganzleinen DM 36,—
2. Teil: Kalkulation und Auswertung der Kostenrechnung X I I , 568 Seiten. 1958. Ganzleinen DM 42,— „Übersichtlich, in der Anschaulichkeit durch zahlreiche Muster und Vordrucke ergänzt, liegt damit ein umfassendes Werk zur Kosten- und Betriebsabrechnung vor. Die klare und ansprechende Darstellung hat auch schwierigste Zusammenhänge und moderne Entwicklung einbezogen. Das Buch wird sich für alle an Kostentheorie und Kostenrechnung Interessierten von hohem Wert und als praktische Hilfe für die Aufgaben des Alltags erweisen." Bücher für die Wirtschaft, Köln EWALD BURGER
Einführung in die Theorie der Spiele Mit Anwendungsbeispielen, insbesondere aus Wirtschaftslehre und Soziologie Groß-Oktav. 169 Seiten. 1959. Ganzleinen DM 28 — „Es ist verdienstvoll, daß mit diesem Buch erstmalig auch eine deutschsprachige Zusammenfassung der bisherigen Ergebnisse der methodischen Forschung erarbeitet worden ist . . . Es ist unvermeidlich, daß in einem grundlegenden Werk das Schwergewicht auf mathematischem Gebiet liegt, doch weist die Theorie der Spiele eine derartige Anwendungsweite auf, daß sie auf wirtschaftliche, strategische oder soziologische Situationen ausgerichtet werden kann. Den W i r t s c h a f t l e r werden vornehmlich die behandelten Anwendungsfälle beim Konkurrenzproblem (Oligopol) und beim ,linear programming* ansprechen." Bücher für die Wirtschaft
WALTER
DE
GRUYTER
& CO., B E R L I N
W35
vormals G. J . Gösdien'sdie Verlagshandlung — J . Guttentag, Verlagsbuchhandlung — Georg Reimer — Karl J . Trübner — V e i t & Comp.