DE2321262A1 - Digitalrechner - Google Patents
DigitalrechnerInfo
- Publication number
- DE2321262A1 DE2321262A1 DE2321262A DE2321262A DE2321262A1 DE 2321262 A1 DE2321262 A1 DE 2321262A1 DE 2321262 A DE2321262 A DE 2321262A DE 2321262 A DE2321262 A DE 2321262A DE 2321262 A1 DE2321262 A1 DE 2321262A1
- Authority
- DE
- Germany
- Prior art keywords
- memory
- operators
- instruction
- parameter
- automatically
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Description
Pafenicmwälie
Dr.-ing. Wilhelm Beichel
Dipl-Ing. Wdinang Reicliel
Dipl-Ing. Wdinang Reicliel
6 Frank:, aiia. M. 1
Parksiraße 13
Parksiraße 13
7438
ELLIOTT BROTHERS (LONDON) LIMITED, Chelmsford, England
Digitalrechner
Die Erfindung bezieht sich auf Digitalrechner.
Bei der Weiterentwicklung von in Flugkörpern verwendeten Rechenanlagen kann man zwei Hauptrichtungen erkennen. Dabei
handelt es sich
a) zum einen um die Tendenz, den Rechenmaschinen eine kompliziertere Struktur und einen komplizierteren
Aufbau zu geben, insbesondere Multiakkumulatoren und
kompliziertere Befehlsvorräte zu verwenden, und
b) zum anderen um die Tendenz, hochstufige Programmiersprachen zu benutzen.
Diese Tendenzen sind in einem gewissen Maß unverträglich und sollten auf das Hauptziel abgestellt sein, nämlich eine möglichst
kostensparende Rechenanlage zu schaffen.
30 98 4 6/1071 omeiNAi inspected
Die Verwendung einer komplizierten Struktur und wirkungsvoller
Befehlsvorräte schafft eine Rechenmaschine, bei der der erforderliche Speicherraum möglichst klein ist, wenn
die Programme im Maschinenkode geschrieben sind. Wenn man jedoch für derartige Maschinen keine äußerst verfeinerten
hochstufigen Sprachcompiler schreibt, wiegt die sich ergebende Unwirksamkeit in dem vom Compiler erzeugten Kode die
Einsparungen auf, die durch eine komplizierte Struktur und wirkungsvolle Befehlsvorräte erzielt werden.
In ähnlicher Weise bedeutet die Tatsache, daß die Maschine einen wirkungsvolleren Befehlsvorrat aufweist, daß dem
Programmierer eine größere Anzahl von Auswahlmöglichkeiten zur Verfügung steht, um ein Problem zu lösen. Der Programmierer
kann daher eine längere Zeit benötigen, um zur optimalen Lösung zu gelangen. Der Grund für das Obige ist
darin zu sehen, daß sich die Bauelement- und Gerätekonstrukteure mit der Herstellung einer Rechenmaschine befassen, die
mit einer minimalen Menge von Bauelementen und Geräten auskommt, und daß sich diese Konstrukteure damit befassen, den
Maschinenkode des Rechners zu optimieren, um ihr Ziel zu erreichen. Nachdem somit die Programmierer in Verbindung mit
den Gerätekonstrukteuren die Entscheidung getroffen haben, daß in einer Rechenmaschine ein besonderer Befehlsvorrat benötigt
wird, befassen sich die Konstrukteure nur noch mit der Optimierung der Befehls-, Betriebsart- und Datenformate.
Die Compiler für derartige Maschinen sind daher kompliziert Und in der Herstellung teuer sowie gleichzeitig hinsichtlich
der Speicherung unwirtschaftlich.
Die Erfindung befaßt sich nun mit einem alternativen Weg, der darauf abgestellt ist, eine Rechenmaschine zu schaffen, die
hinsichtlich der Speicherung als auch der Betriebsweise mit einer hochstufigen Sprache leistungsfähig ist.
3 0.9846/ 107 1
Nach der Erfindung zeichnet sich ein Digitalrechner aus
durch eine Zentraleinheit, einen Hauptspeicher zur Aufnahme von Digitaldaten in Form von Anweisungen mit Operatoren
und Parametern in einer kompakten hochstufigen Sprache,
einen Anweisungsspeicher, einen Parameterspeicher, eine automatisch wirksame Einrichtung zum Transferieren von
Operatoren oder alternativ von Operatoren und Parametern von dem Hauptspeicher zu dem Anweisungsspeicher, eine automatisch
wirksame Einrichtung zum Transferieren von Parametern von dem Hauptspeicher zu dem Parameterspeicher, und
zwar in der Reihenfolge, in der die Anweisungen auftreten, eine Folgedekodierlogik zur automatischen Überprüfung der
Operatoren in dem Anweisungsspeicher, um deren Prioritätsstufe zu bestimmen, einen Folgespeicher, dem das Ausgangssignal
der Folgedekodierlogik zugeführt wird, um die Operatoren in Übereinstimmung mit den ihnen zugeordneten Prioritäten
automatisch zu speichern, und eine Mikroprogrammanordnung, die in Abhängigkeit von dem Inhalt des Folgespeichers
automatisch gesetzt und wirksam wird, um die Zentraleinheit derart zu steuern, daß sie die Digitaldaten
verarbeitet, die ihr unter der Steuerung des Parameterspeichers und in Übereinstimmung mit dem in der Mikroprogrammanordnung
aufgestellten Mikroprogramm automatisch zugeführt werden.
Ferner zeichnet sich ein Digitalrechner nach der Erfindung aus durch eine Zentraleinheit, einen Hauptspeicher zur Aufnahme
von Digitaldaten in Form von Anweisungen mit Operatoren und Parametern in einer kompakten hochstufigen Sprache,
wobei die Operatoren und Parameter mit variabler Länge kodiert sind, die durch den Umfang der Benutzung bestimmt ist,
dem die Operatoren und Parameter ausgesetzt sind, und die im allgemeinen in umgekehrter Beziehung zum Umfang der genannten
Benutzung steht, ferner durch einen Anweisungsspeicher, einen Parameterspeicher, eine automatisch wirksame
Einrichtung zum Transferieren von Operatoren oder von Opera-
309846/1071
toren und Parametern variabler Länge vom Hauptspeicher zum
Anweisungsspeicher, eine automatisch wirksame Einrichtung zum Transferieren von Parametern variabler Länge vom Hauptspeicher
zum Parameterspeicher in der Reihenfolge, in der diese in der Anweisung auftreten, eine Folgedekodierlogik
zur automatischen Überprüfung der Operatoren in dem Anweisungsspeicher, um deren Prioritätsstufen zu bestimmen, einen
Folgespeicher zum Empfang des Ausgangssignals der Folgedekodierlogik, um die Operatoren in Übereinstimmung mit
den ihnen zugeordneten Prioritäten automatisch zu speichern, und eine Mikroprogrammanordnung, die in Abhängigkeit von dem
Inhalt des Folgespeichers automatisch setzbar und automatisch betreibbar ist, um die Zentraleinheit zur Verarbeitung von Digitaldaten zu steuern, die sie unter der Steuerung des Pärameterspeichers und in Übereinstimmung mit dem
in der Mikroprogrammanordnung aufgestellten Mikroprogramm automatisch erhält.
Nach einer bevorzugten Weiterbildung weist der Rechner eine Parameterdekodierlogik auf, die wirksam ist, um aufeinanderfolgende
Parametereinheiten zwischen Operatoren zu erkennen
und somit automatisch die Anzahl der Parametereinheiten zu bestimmen, die zur Bildung eines Parameters benutzt werden.
Unter dem Ausdruck "kompakte hochstufige Sprache" ist hier
eine Ableitung einer hochstufigen Grundsprache, wie ALGOL, COBOL, FORTRAN, CORAL oder PL1, zu verstehen, deren ,Informationsinhalt derselbe wie derjenige der hochstufigen Grundsprache
ist, die Jedoch bezüglich der Kodierung wesentlich kompakter ist. Im folgenden wird noch ein Beispiel zur Erzeugung einer kompakten hochstufigen Sprache aus einer hochstufigen Grundsprache gegeben.
Es sind zahlreiche hochstufige Sprachen verfügbar, unter denen FORTRAN und ALGOL am bekanntesten sind. PL1 gewinnt
zunehmend an Popularität, und CORAL wird für militärische
3098Λ6/1071
Echtzeitberechnungen in zunehmendem Maße vorgeschrieben. Obwohl sich diese Sprachen im einzelnen unterscheiden, stimmen
sie in ihren Hauptmerkmalen überein und geben einem Programmierer ein leicht verständliches Mittel in die Hand, um
damit Programme zu schreiben. Im allgemeinen sind Jedoch die mit diesen Compilern hergestellten' Programme hinsichtlich
des erforderlichen Speicherbedarfs unwirtschaftlich. Dies kann man durch Überprüfen eines äußerst einfachen Programms
sehen.
Es sei angenommen, daß der Ausdruck
a«b — c«d
a«b — c«d
v "~ e»f - g«h
berechnet werden soll, Wenn man nun Rechner mit 1, 2, 4 oder
8 Akkumulatoren in Betracht zieht, müssen die folgenden Instruktionen im Maschinenkode beachtet werden.
Anzahl der Akkumula toren ss 1 |
lade g | 2 | 4 | 8 |
1 | mult.mit h | lade g in Akk.1 |
lade g in Akk.1 |
lade g in Akk.1 |
2 | speichere gh | mult.mit h im Akk.1 |
mult.mit h im Akk.1 |
mult.mit h im Akk.1 |
3 | lade e | lade e in Akk.2 |
lade e in Akk.2 |
lade e in Akk.2 |
4 | mult. f | mult.mit f im Akk.2 |
mult.mit f im Akk.2 |
mult.mit f im Akk.2 |
VJl | sub. gh | sub.Akk.1 von Akk.2, gib Antwort in Akk.1 |
sub.Akk.1 von Akk.2, gib Antwort in Akk.1 |
sub.Akk.1 von Akk.2 gib Antwort in Akk.1 |
6 | speichere (ef - gh) |
speichere Akk.1 |
lade c in Akk.2 |
lade c in Akk.2 |
7 | lade c | lade c in Akk.1 |
mult.Akk.2 mit d |
mult.Akk.2 mit d |
8 | mult.Akk.1 mit d |
lade a in Akk.3 |
lade a in Akk.3 |
309846/1071
1 | 2 | 4 | 2321262 O |
|
9 | mult, d | lade a in Akk.2 |
ault.Akk.3 mit b |
mult.Akk.3 mit b |
10 | speichere cd | mult.mit b im Akk.2 |
sub.Akk.2 von Akk.3» gib Antwort in Akk.2 |
sub.Akk.2 von Akk.3» gib Antwort in Akk.2 |
11 | lade a | sub.Akk.1 von Akk.2, . gib Antwort in Akk.1 |
teile Akk.2 mit Akk.1 |
teile Akk.2 mit Akk.1 |
12 | mult, b | teile mit (ef - gh) |
speichere ' . Antwort |
speichere Antwort |
13 | sub. cd | speichere Antwort |
||
14 | teile (ef - gh) |
|||
15 | speichere Antwort |
Eine Rechenmaschine mit einem einzigen Akkumulator benötigt somit 15 Instruktionen, um die erforderliche Funktion zu berechnen,
während unter der Annahme, daß bei den Multiakkumulatormaschinen. keine Aufruf- oder Adressierungsprobleme auftreten,
weniger Instruktionen erforderlich sind, nämlich 13 bei der 2-Akkumulatormaschine und ,jeweils 12 bei der 4- und 8-Akkumulatormaschine.
Die gegenwärtigen hochstufigen Sprachen gehorchen den Instruktionen
in einer strikten Prioritätsfolge, es sei denn, daß eine
andere Folge durch Klammern angedeutet wird.
Die Folge läuft wie folgt ab:
a) Bei Anweisungen in Klammern wird der Ausdruck in den innersten Klammern zuerst berechnet, und die Maschine arbeitet
sich von da aus nach außen weiter. ·
b) Wenn eine Reihe von eingeklammerten Anweisungen vorhanden
ist, die durch arithmetische Operatoren getrennt sind, werden
die eingeklammerten Anweisungen von links nach rechts
fortschreitend beachtet.
309846/1071
~7~ 2321252
c) Einer Potenz kommt die höchste Priorität innerhalb eines arithmetischen Ausdrucks zu.
d) Multiplikationen und Divisionen haben die nächsthöhere Priorität.
e) Additionen und Subtraktionen haben die nächsthöhere Priorität.
Unter Beachtung dieser Regeln kann man den Ausdruck
. . ■ a [b - c (d2e - fjj
g |h + d (k + ΛΖ) j
in ALGOL wie folgt schreiben y:= a* (b-c*(df2 * e-f)) /g * (h+d * (k+if2)h
dabei wird die nachstehende Folge ausgeführt: ' D d2
II) d2e III) (d2e - f)
IV) c (d2e - f) .V) b - c (d2e - f)
VI) a ί b - c (d2e - f)|
VII) I2
VIII) (k + I2)
IX) d(k + I2)
X) h + J(k + I2)
g [h +
b - c
(d2e -
f)]
+ ά (k■+ ι2) j
309 846/1071
Im folgenden wird wieder das erste Beispiel betrachtet:
v =
y e«f - g'h
Diese Beziehung stellt sich in ALGOL wie folgt dar:
y: = (a * b - c * d)/(e * f - g * h);
y: = (a * b - c * d)/(e * f - g * h);
Unter der Annahme, daß bei Multiakkumulatormaschinen ein
einmal für eine Funktion benutzter Akkumulator nicht erneut
benutzt wird, es sei denn, daß entweder ein Löschbefehl oder ein Speicherbefehl für den Akkumulator vorliegt, ergibt sich die folgende Befehlsfolge bei der übersetzung der ALGOL-Ausdrücke in den Maschinenkode: , , t
einmal für eine Funktion benutzter Akkumulator nicht erneut
benutzt wird, es sei denn, daß entweder ein Löschbefehl oder ein Speicherbefehl für den Akkumulator vorliegt, ergibt sich die folgende Befehlsfolge bei der übersetzung der ALGOL-Ausdrücke in den Maschinenkode: , , t
Anzahl der Akkumulatoren =
Befehlsnummer
1 | lade a | lade a | lade a | Wie |
in Akk.1 | in Akk.1 | |||
2 | mult. b | mult.Akk.1 | Akk.1 χ b | für |
mit b | die | |||
3 | speichere axb | lade c | lade c | |
in Akk.2 | in Akk.2 | 4-Akku | ||
4 | lade c | mult.Akk.2 | Akk.2 χ d | |
mit 2 | mulator | |||
5 | mult, d | sub.Akk.2 | Akk.1 - | maschine |
von Akk.1 | Akk.2 in | |||
Akk.1 | ||||
6 | speichere | speichere | lade e | |
cxd | Akk.1 | in Akk.3 | ||
7 | lade | lösche | Akk.3 x f | |
axb | Akk.2 | |||
8 | subtrahiere | lade e | lade g | |
cxd | in Akk.1 | in Akk.4 | ||
9 | speichere | mult.Akk.1 | Akki4 xh | |
(ab-cd) | mit f | |||
10 | lade e | lade g | Akk.3 - Akk.4 | |
in Akk.2 | in Akk.3 | |||
309846/1071
1 | 2 | 2321262 | 2 | |
mult. f | mult.Akk.2 | 4 8 | ||
11 | mit h | Akk.1 + Akk.3 | ||
speichere | Akk.1 - | in Akk.1 | ||
12 | e χ f | Akk. 2 | speichere | |
lade g | lösche Akk. | Akk.1 | ||
13 | mult. h | lade ab-cd | ||
14 | in Akk.2 | |||
speichere gh | Akk.2 + | |||
15 | Akk.1 | |||
lösche ef | speichere | |||
16 | Akk. 2 | |||
subtrahiere gh | ||||
17 | speichere | |||
18 | (ef-gh) | |||
lade (ab-cd) | ||||
19 | teile mit | |||
20 | (ef-gh) | |||
speichere | ||||
21 - | (ab-cd) | |||
(ef-gh) | ||||
Wenn man nun die maschinenkodierten Ausdrücke mit dem von
einem Compiler erzeugten Kode vergleicht, ergibt'sich die
folgende Tabelle:
Anzahl der Akkumula toren |
Anzahl der Wörter in einem assemb lerkodierten Programm |
Anzahl der Wörter in einem HLL- kodierten Programm |
Wirkungsgrad des Compilers |
1 | 15 | 21 | 7290 |
2 | 13 | 16 | 81 % |
4 | 12 | 12 | 100% |
8 | 12 | 12 | 1009έ |
Die 4- und 8-Akkumulatormaschinen sind bei dem gegebenen Beispiel
leistungsfähig oder wirtschaftlich, da in dem untersuchten Ausdruck nur eine begrenzte Anzahl von Variablen vorhanden
ist. Wenn die Anzahl der Variablen zunimmt, wird auch die Unwirtschaftlichkeit der Multiakkumulatormaschinen größer.
309846/1071
Eine hochstufige Sprache benutzt eine Reihe von Sym- ;Λ
bolen, die als Grundsymbole bekannt sind. Obwohl das Grundprinzip von allen hochstufigen Sprachen ähnlich ist, soll im
folgenden Fall als Beispiel ALGOL betrachtet werden.
Die Grundsymbole von ALGOL sind:
1. Die Groß- und Kleinbuchstaben des Alphabets
2. Die Ziffern 0 bis 9
3. Arithmetische Operatoren +- * / div. r Λ
4. Vergleichsoperatoren = -
5. Logische Operatoren and (und) or (oder) not (nicht) equiv (äquivalent)
6. Folgeoperatoren goto (Sprung nach) if (wenn) then (dann)
eise (wenn nicht anders) for (für) do (führe aus)
7. Separatoren, . : ; := stop (stopp) until (bis) while (während)
comment (Bemerkung)
8. Klammern () Cjf £? begin (Beginn) end (Ende)
9. Vereinbarungs- und Spezifikationssymbole integer (ganzzahlig)
array (Feld) real (reell) switch (Verteiler) procedure (Unterprogramm)
own (eigen) boolean (boolesch) label (Marke)"
value (Wert) string (Kette)
10. Logikwerte true (wahr) false (falsch)
Die Art der Verwendung dieser Begriffe kann man dem folgenden
Beispiel entnehmen.
Es sei angenommen, daß zwei kartesische Koordinaten (x, y) in
Polarkoordinaten (r, Θ) umgewandelt werden sollen. Dazu werden die folgenden Beziehungen benutzt:
r -sr vx + y
θ = O wenn χ = O und y = O, θ - 0 wenn x7 0 und y = 0
Tr ■ ■ T*"
θ = »j wenn χ < 0 und y = 0, θ = -ή wenn χ = 0 und y ^ 0
θ = ΤΓ;/2 wenn χ = 0 und y<
0,
θ = arctan (γ/χ) wenn x>0 für alle Werte von y,
309846/1071
θ = Tit + arctan (y/x) wenn x<
O und y^O,
θ = (TT-- arctan (y/x) ) wenn x< 0 und y<
0,
In ALGOL sieht das Programm wie folgt aus: begin (Beginn) real (reell) x, y, r, theta;
integer (ganzzahlig) i, n;
read (lies) η
for (für) i, = 1 step (Schritt von) 1 until (bis) η do (führe Schleife aus)
begin (Beginn) read (lies) x, y;
r: β sqrt (Quadratwurzel) (x^ 2 + y'fz);
theta: = if (wenn) x>0 and (UND) y = 0 then (dann) 0 else(sonst)
if (wenn) x< 0 and (UND) y = 0 then (dann) 3,14159265
eise (sonst)
if (wenn) x= 0 and (UND) y> 0 then (dann) 1,57079633
eise (sonst)
if (wenn) x= 0 and (UND) y< 0 then (dann) 1,57079633
eise (sonst)
if (wenn) x>0 then (dann) arctan (y/x) eise (sonst)
if (wenn) x?0 and (UND) y; 0 then (dann) 3,14159265
+ arctan (y/x) eise (sonst)
if x<0 and (UND) y< 0 then (dann) -(3,14159265-arctan
(y/x)i
end (Ende);
end (Ende);
end (Ende);
Beim Lochen des Kodes wird jedes Zeichen durch ein einziges 8-Bit-Byte dargestellt. Obwohl es möglich wäre, den Kode in
seiner Gesamtheit im Rechnerspeicher zu speichern, wäre dies äußerst verschwenderisch. Stattdessen kann man den Originalkode
in der folgenden Weise kompaktieren, um eine hochstufige Kompaktsprache
zu erzeugen: . -..
309846/1071
a) Es sei eine 8-Bit-Byte-Organisation angenommen
b) Von den 256 möglichen Kombinationen eines 8-Bit-Byte werden
die ersten 128 für Operatoren und SpezialZeichen verwendet.
Auf diese Weise sind alle arithmetischen, regional logischen und sequentiellen Operatoren durch einen 1-Byte-Kode
gekennzeichnet. Dadurch wird hinsichtlich der Speicherung eine große Wirtschaftlichkeit erzielt, da beispielsweise
then (dann) als ein 1-Byte-Kode anstatt von 8 erforderlichen Bytes gespeichert wird.
c) Die übrigen 128 Kombinationen werden für die Binärzahlen
0 bis 127 benutzt. Da sich diese Kombinationen im oberen Feld des 8-Bit-Byte befinden, bedeutet eine 1 in der höchstwertigen
Bitstelle eines Byte, daß der Rest des Byte eine Zahl ist, während eine 0 in der höchstwertigen Bitstelle
bedeutet, daß ein Zeichen vorliegt.
d) Bisjetzt wurden lediglich 52 der 128 Zeichenfelder benutzt.
Zusätzliche 1-Byte-Zeichen werden daher den Standardsub*-
routinen zugeordnet, die normalerweise innerhalb einer hochstufigen Sprache verfügbar sind.
e) Die variablen Zeichen, die am Anfang des Programms stehen, werden derart gehandhabt, daß beim Eintritt in die Maschine
jeder Variablen eine absolute Adresse zugeordnet wird. Wenn danach eine variable Marke im Programmkörper festgestellt
wird, wird sie durch eine passende Adresse ersetzt. Um den erforderlichen Speicheraufwand so" gering wie möglich zu
halten, wird ein Seiten- und Kapitel-System benutzt. Jede Seite umfaßt 128 Wörter, die durch ein einziges Byte gegeben
sind. Ein zweites Byte liefert 128 Seiten, während ein drittes Byte den 128 Kapiteln zugeordnet ist. Die gesamte
Bytespeichermenge beträgt daher 128 χ 128 χ 128 Bytes = 128 χ 16K-Byte-Kapitel oder 2097152 Bytes. Die Organisation
der Maschine ist derart getroffen, daß bei jeder Adressenüberprüfung
auch ein Seitenindexregister und ein Kapitelindexregister überprüft werden. Wenn das Seiten- und Kapitelindexregister
mit den vorangegangenen Einstellungen identisch sind, wird lediglich die Wortadresse in der An-
309846/1071
Weisung gespeichert. Wenn die Seitenadresse unterschiedlich ist, gibt das erste numerische Byte die Wortadresse und das
zweite numerische Byte die Seitenadresse an. Falls sich auch die Kapiteladresse ändert, wird ein drittes numerisches
Byte benutzt.
Bei der Speicherung kann man eine noch größere Wirtschaftlichkeit dadurch erzielen, wenn man die Kodierung der Operatoren
und Parameter mit variabler Länge vornimmt, und zwar in Abhängigkeit
davon, wie oft die Operatoren und Parameter benutzt werden. Je häufiger ein Operator oder Parameter benutzt wird,
um so kürzer wird die Kodierung ausgeführt. Dem Operator LOAD (lade), der hier sehr häufig benutzt wird, kann man beispielsweise
einen 1-Bit-Kode geben.
Wenn man diese Regeln zum Kompaktieren der hochstufigen Programmiersprachanweisung
anwendet, wird die Anweisung als kompakte hochstufige Sprachanweisung in dem Hauptspeicher des Rechners
gespeichert.
Eine Anweisung der Form
ρ
alpha = χ + 2bx + c
alpha = χ + 2bx + c
mit der hochstufigen Sprachdarstellung alpha:= xf2 + 2*b*x+c;
wird wie folgt gespeichert:
wird wie folgt gespeichert:
alpha, χ, b und c werden in die Speicheradreßplätze dekodiert,
die diesen Variablen zugeordnet sind. Wenn sie sich im selben Kapitel und auf derselben Seite wie die von der Maschine gehandhabten
vorangegangenen Variablen befinden, wird ihnen eine 1-Byte-Adresse zugeordnet. Wenn sie alle zusammen gegenüber der
laufenden Seite auf einer anderen Seite sind, wird alpha eine 2-Byte-Adresse und dem Rest eine 1-Byte-Adresse gegeben. Wenn
sie alle auf verschiedenen Seiten sind, erhalten sie alle 2-Byte-Adressen. Unter der Annahme, daß sich die Variablen alle
auf derselben Seite befinden, wird die obige Anweisung als eine 14-Byte-Anweisung gespeichert.
309846/1071
Da sich die Länge der Parameter ändern kann, muß man in der Lage sein können, die tatsächliche Länge der Parameter zu bestimmen,
die eine Anweisung ausmachen. Die Lösung dieses Problems beruht auf der Tatsache, daß in einem algebraischen Ausdruck
die Parameter (Variablen oder Konstanten) stets durch einen Operator getrennt sind, wie es bei der folgenden Beziehung
der Fall ist:
ρ
alpha = χ + 2bx + c
alpha = χ + 2bx + c
In einer hochstufigen Sprache erhält man für diese Beziehung: alpha := χ2 + 2*b*x + Cj
In kodierter Form würde dieser Ausdruck eine Anweisung bilden, die aus,einer Reihe von Operatoreinheiten und Parametereinheiten
besteht, deren Längen möglicherweise von einigen wenigen Bits bis zu drei Bytes variieren. Wenn man zwischen einem Operator
und einem Parameter (wie zuvor erwähnt) unterscheidet und eine geeignete Logik (eine Parameterdekodierlogik) vorsieht,
kann der Rechner die Länge der Parameter dadurch bestimmen, daß er die Parametereinheiten durchschreitet, bis ein Operator festgestellt
wird. Die Parameterdekodierlogik kann sich mit der Folgedekodierlogik in gemeinsame Elemente teilen.
Nachdem nun ein Schema zum Speichern einer hochstufigen Sprachanweisung
in einer kompakten Form vorgeschlagen ist, sollte die Wirtschaftlichkeit des Speicherschemas untersucht werden. Dies
wird dadurch vorgenommen, daß unter Verwendung der verschiedenartigen bisherigen Beispiele der Speicherraum untersucht wird,
der von
a) den kompakten hochstufigen Sprachanweisungen und
b) dem Maschinenkode äquivalent eingenommen wird.
Hierzu wird zunächst auf das folgende Beispiel Bezug genommen:
ρ
y = χ + 2bx +c
y = χ + 2bx +c
3 0 9846/1071
In einer kompakten hochstufigen Sprache (CHLL-Form) werden, wie bereits erläutert, 14' Bytes oder 112 Bits benötigt. Im
Maschinenkode würde man erhalten:
lies χ
multipliziere mit χ
2 speichere χ
lies χ multipliziere rait b
multipliziere mit
2 addiere χ
addiere c speichere y
Dies sind 9 Wörter, wenn man eine Wortlänge von 16 Bits annimmt, sind 144 Bits erforderlich.
Nun soll das Beispiel mit der folgenden, bereits erwähnten Beziehung
betrachtet werden:
_ a«b - c»d J Ä e«f - g«h
In CHLL-Form erhält man:
yjs (a * c*d)/(e*f - g*h);
dazu werden 22 Bytes mit jeweils 8 Bits benötigt.
Unter der Annahme, daß die in der vorangegangenen Analyse aufgeführten
Wörter 16 Bits einnehmen, ergibt sich die folgende Tabelle:
309846/1071
Anzahl der Anzahl der Anzahl der Anzahl der Anzahl der
Akkumula- Wörter im Bits im Wörter im Bits im
toren Maschinen- Maschinen- HLL-Kode HLL-Kode kode kode
1 15 240 21 336
2 13 208 16 256 4 12 192 12 192 8 12 192 12 192
CHLL 22 Bytes 176 - -
In dem obigen Beispiel wird angenommen, daß die Multiakkumulatormaschinen
eine 16-Bit-Wortlänge und ein Befehlsrepertoir
haben, das es jedem Akkumulator ermöglicht, sowohl mit dem Speicher als auch mit den anderen Akkumulatoren in Verbindung
zu treten. In der Praxis ist dies nicht möglich, und man benötigt einige zusätzliche Wörter/ um die mit einem 16-Bit-Wort
zu berechnende Funktion zu erlangen. Es sollten daher mindestens • 16 weitere Bits den 4- und 8-Akkumulatormaschinen zugegeben
werden.
Aus den bisher betrachteten einfachen Beispielen geht hervor, daß das beschriebene Verfahren im Vergleich zu herkömmlichen
Maschinen zu einer Verminderung des Speicherbedarfs führt. Diese Verminderung liegt in einem Bereich von 1596 bis 30%.
Da bisjetzt lediglich einfache arithmetische Operationen betrachtet
wurden, soll jetzt eine kompliziertere Aufgabe analysiert werden. Diese Aufgabe betrifft die Mechanisierung einer
Trägheitsplattformsteuerung und Navigationsgleichungen. In dem 920C-Rechner werden für diese Aufgabe schätzungsweise 805 Wörter
ausschließlich von Subroutinen benötigt. Die Subroutinen benötigen weitere 705 Wörter.
Wenn man dieselben Gleichungen in CHLL-Form analysiert, beträgt die minimale Anzahl von Bytes 794. Wenn man annimmt, daß
die Hälfte der Daten für einen Seitenwechsel benötigt werden,
3098 46/1071
2321?62
erhöht sich die Anzahl auf 990 Bytes. Wenn man darüberhinaus einen 20%igen Sicherheitsfaktor für Unvorgesehenes einräumt,
werden 1190 Bytes benötigt.
Wenn man die Grundanzahl von Wörtern in Betracht zieht, ist in der 920C-Maschine ein Speicherraum von etwa 14500 Bits erforderlich.
Wenn man eine 24-Bit-Multiregistermaschine mit
indirekter Adressierung zugrundelegt, braucht man etwa das 0,7-fache der Wortanzahl und gelangt somit zu einem Wert zwischen
13500 und 14000 Bits. Wenn man eine Doppelakkumulator-16-Bit-Maschine
mit relativer Adressierung verwendet, beträgt die Anzahl der Bits 14700. Diese Zunahme beruht auf der Tatsache,
daß, obwohl der Multiakkumulator die Anzahl der erforderlichen
Wörter vermindert, die relative Adressierung diesen Parameter erhöht.
Bei der CHLL-Maschine benötigt man 9520 Bits für die Speicherung.
Im Durchschnitt benötigt man daher lediglich 65% des Speichersy
wenn man die gestellte Aufgabe mit einer CHLL-Maschine anstatt mit einer herkömmlichen laufend generierenden Maschine löst.
Diese Zahlenangaben stellen den schlechtesten Fall dar, da
a) die Bitanzahl der herkömmlichen Maschine keine Subroutinen umfaßt, während festverdrahtete Subroutinen für die CHLL-Maschine
vorgesehen sind, und
b) für die CHLL-Maschine ein Sicherheitsfaktor für Unvorgesehenes einberechnet ist, während dies bei der herkömmlichen
Maschine nicht berücksichtigt ist.
Wenn man die obigen Punkte noch in Betracht zieht, gibt die folgende Tabelle die Speichersituation wieder:
300846/1071
Geschätzte Anzahl | unvorhergesehenen | CHLL-Speicher) . | Geschätzte Anzahl | |
der zur Speicherung | Falles | der zur Speicherung | ||
benötigten Bits | % Speicher- / einsparung -M - |
benötigten Bits | ||
Maschine | ohne Subroutinen | mit Subroutinen | ||
92OC | 14500 | 27200 | ||
24-Bit-Multi- | ||||
akkumulator mit indirekter |
14000 | 26200 | ||
Adressierung | ||||
16-Bit-Multi- | ||||
akkumulator mit | 14700 | 27500 | ||
relativer | ||||
Adressierung | ||||
Durchschnitt bei | ||||
herkömmlichen | 14400 | 27000 | ||
Maschinen | ||||
CHLL-Maschine | 9500 | 9500 | ||
CHLL-Mas chine | ||||
ohne Berücksich | ||||
tigung eines | 7900 | 7900 | ||
. χ 100 |
Speicher 34,1%
45%
65 % mit Berücksichtigung unvorhergesehener Fälle .
70 % ohne Berücksichtigung unvorhergesehener Fälle
Da·alle bisher betrachteten Beispiele grundsätzlich arithmetischer
Natur sind, soll eine Reihe logischer Operationen betrachtet werden. Zu diesem Zweck wird das bereits genannte Beispiel
zur Umwandlung kartesischer in Polarkoordinaten analysiert.
309848/1071
Das Ergebnis ist, daß man 64 Wörter im Maschinenkode und 117 Bytes im CHLL-System benötigt. Die Anzahl der zur Speicherung benötigten Bits beträgt somit 1024 bzw. 936.
Die folgende Tabelle gibt eine Zusammenfassung der Ergebnisse
der oben aufgeführten Beispiele.
Anzahl von Bits
Funktion | •Maschinen kode |
CHLL- kode |
Speicher einsparung in % |
|
a. | einfache arithmetische Operationen * |
352 | 288 | 18 |
b. | komplizierte arithmeti sche Operationen |
14400 | 9500 | 34 |
C. | komplizierte arithmeti sche Operationen einschl. von Subroutinen |
27000 | 9500 | 65 |
d. | logische Operationen | 1024 | 936 | 9 |
Summe aus a+b+d | 15776 | 10724 | 32 | |
Summe aus a+c+d | 28376 | 10724 | 62 |
* Dies ist die Summe der beiden einfachen betrachteten arithmetischen Beispiele
Allgemein kann man sagen, daß das Schreiben in einer hochstufigen Sprache mit herkömmlichen Maschinen eine Zunahme von etwa
3096 des benötigten Speicherraums zur Folge hat. Wenn man daher
mit herkömmlichen Maschinen eine hochstufige Sprache compiliert,
erhält man die folgenden Zahlen:
309846/1071
Anzahl von Bits Anzahl von Bits Speicherin einer her- im CHLL-System einsparung
kömmlichen in %
Maschine mit
einer hochstufigen Programmiersprache
einer hochstufigen Programmiersprache
Summe aus a+b+d 20000 10724 46 Summe aus a+c+d 36400 10724 70
Obwohl die obigen Beispiele keineswegs vollständig sind, geht daraus hervor, daß man mit kompakten hochstufigen Sprachen beträchtliche
Einsparungen hinsichtlich des benötigten Rechnerspeicherraums erzielt. Diese Einsparungen liegen im Vergleich
zu maschinenkodierten Programmen bei etwa 30% und im Vergleich
zu hochstufige Sprachen compilierenden Generatormaschinen bei etwa
Nachdem nun ein Speicherkonzept gefunden ist, das einen vernünftigen
Speicherungswirkungsgrad vorsieht, muß nun.untersucht werden, wie ein derartiges Konzept gerätetechnisch ausgeführt
werden kann.
Unter Bezugnahme auf Fig. 1 ergibt sich das folgende Konzept:
a) Der Datentransfer zwischen den verschiedenen Teilen des Rechners erfolgt über eine Digitalstraße 10, und die Eingabe/
Ausgabe 11 und der Hauptspeicher 12 sind mit dieser Digitalstraße verbunden,
b) Der Hauptspeicher enthält sowohl die Daten als auch die Programme, die in einer kompakten hochstufigen Sprachform
gespeichert sind.
c) Eine vollständige CHLL-Anweisung wird vom Hauptspeicher unter der Einwirkung einer Digitalstraßensteueruhg 13 in einen
Anweisungsspeicher 14 transferiert. Um die Größe des Anweisungsspeichers
14 klein zu halten, wird die Anzahl der Bytes in der CHLL-Anweisung einer Beschränkung unterworfen. Zu-
309846/1071
nächst sei angenommen, daß entweder 64 oder 128 Bytes die
maximale Größe dieser Anweisung darstellen. Es sei bemerkt, daß zusammengesetzte bedingte Anweisungen in der Form wie
if (wenn) and (UND) then (dann) eise (sonst)
if (wenn) usw. als eine Reihe von Anweisungen behandelt werden, wobei das Zeichen eise (sonst) das Ende eines Anweisungszeichens
darstellt.
d) Wenn die Anweisung unter der Steuerung eines Speicheradreßregisters
30 von dem Hauptspeicher 12 in den Anweisungsspeicher 14 transferiert wird, werden die in der Anweisung
enthaltenen Adressen (nach den Zeichen:= oder if (wenn)) in einen Parameterspeicher 15 transferiert. Alternativ können
nur die Operatoren in den Anweisungsspeicher transferiert werden.
e) Die Anweisung im Anweisungsspeicher 14 wird durch die Folgedekodierlogik
16 überprüft, und die Reihenfolge, in der die Anweisung befolgt werden soll, wird in Übereinstimmung
mit einer definierten Prioritätsliste bestimmt, die in den Folgedekoder eingebaut ist. Diese Reihenfolge wird in einem
Folgespeicher 17 gespeichert.
f) Gleichzeitig mit der Dekodierung der Reihenfolge werden die
Daten in den Plätzen des Hauptspeichers 12, deren Adressen im Parameterspeicher 15 enthalten sind, vom Hauptspeicher zu
einem Arbeitsdatenspeicher 18 transferiert, und zwar unter der Steuerung des Speicheradreßregisters 30. Dieses ist in
der Größe beschränkt, was darauf zurückzuführen ist, daß die Anzahl der Zeichen in einer Anweisung begrenzt ist.
g) Die Anweisung wird dann in der zuvor bestimmten Reihenfolge ausgeführt und in dem Folgespeicher 17 gespeichert. Dies
wird mit einem Interpreter 21 ausgeführt, der Jeden Operator in dem Anweisungsspeicher 14 mit Hilfe einer Mikroprogrammanordnung
19 in eine Folge von Mikroprogramminstruktionen interpretiert. Die Mikroprogrammanordnung 19 ist in
Abhängigkeit vom Inhalt des Folgespeichers automatisch setzbar und wird automatisch funktionsfähig, um über eine
309846/1071
Takt- und Steuerlogik 31 eine Zentraleinheit 20 zur Verarbeitung der in dem Arbeitsdatenspeicher gespeicherten
Daten zu steuern, die unter der Steuerung des Parameterspeichers und in Übereinstimmung mit dem Mikroprogramm der
Zentraleinheit 20 zugeführt werden.
h) Nachdem die Anweisung ausgeführt ist, wird das Resultat in der RUckkehradresse gespeichert, die als Adresse vor dem
Zeichen:- gespeichert ist.
Im folgenden wird die Reihenfolge der Vorgänge an dem bereits
zuvor herangezogenen Beispiel erläutert:
a«b - c*d
y Ä e-f - g.h
y Ä e-f - g.h
Diese Beziehung wird gespeichert als
y: = (a*b - e*d)/(e*f - g*h);
Es wird angenommen, daß y ein 2-Byte-Kode und die übrigen
Variablen 1-Byte-Kodes sind, wenn die CHLL-Anweisung 23 Bytes
zur Speicherung erfordert.
Der CHLL-Kode wird vom Hauptspeicher 12 zum Anweisungsspeicher
14 transferiert.
Es wird angenommen daß die folgenden Plätze im Hauptspeicher benutzt werden:
30 98 46/ 1071
Adresse | Wort | 2321262 | Seite | |
Zeichen | 1 | 20 | ||
y | 2 | If | ||
a | 3 | Il | ||
b | 4 | Il | ||
C | VJl | η | ||
d | 6 | η | ||
e | 7 | η | ||
f | 8 | η | ||
g | 9 | η | ||
h |
Wenn man nun anstelle von Binärzahlen die dezimale Schreibweise verwendet, wird in Wirklichkeit die folgende Anweisung transferiert:
1 I 20:= (2*3 - 4*5) / (6*7 - 8*9);
(Das Zeichen | wird nicht transferiert oder gespeichert, sondern wird lediglich als Separator in diesem Beispiel
verwendet, um das Wort 1 von Seite 20 anzugeben).
Wenn die Anweisung transferiert wird, werden die Adressen in dem Parameterspeicher 15 gespeichert, und den Variablen hinter
dem Zeichen:= werden sequentiell Datenspeicheradressen gegeben.
Der Parameterspeicher 15 enthält somit die folgenden Daten:
Datenspeicher- | Hauptspeicher | Adreß- |
adreßnummer | wort | seite |
0 | 2 | 20 |
1 | 3 | 20 |
2 | 4 | 20 |
3 | VJl | 20 |
4 | 6 | 20 |
5 | 7 | 20 |
6 | 8 | 20 |
7 | 9 | 20 |
In dem Datenspeicher wird dies wie folgt gespeichert: 220, 3, 4, 5, 6, 7, 8, 9,
309846/10 71
Von diesen Plätzen werden die Daten in die Datenspeicherplätze
0 bis 7 transferiert.
In dem Anweisungsspeicher 14 lautet der Ausdruck nun wie folgt: 20:= (0*1 - 2*3) / (4*5 - 6*7);
Die Folgedekodierlogik 16 tastet diese Anweisung ab, die in dem Anweisungsspeicher die Adressen hat:
Platz Zeichen Platz Zeichen
0 1 12 /
1 20 13 (
2 := 14 4
3 ( 15 *
4 ' 0 16 5
5 * 17
6 1 18 .6
7 - 19 . *
8 2 20 7"
9 * 21 )
10 3 22 ;
11 )
Beim Abtasten erkennt die Logik das Zeichen ( im Platz 3 als
Zeichen höchster Priorität. Da vor dem Klammer-zu-Zeichen ) im
Platz 11 keine weiteren offenen Klammern vorhanden sind, entscheidet
die Logik, daß die Plätze 4 bis 10 zuerst beachtet werden müssen.
Diese Plätze werden abgetastet, und das Zeichen * im Platz
hat Jetzt die höchste Priorität. Die Folgedekodierlogik 16 gibt Jetzt den Platz Nr. 5 in den Folgespeicher 17.
309 846/1071
Der Interpreter 21 wird einen Platz davor beginnen und die gesamte
Operation in einer noch zu beschreibenden Weise interpretieren.
Die anderen Operationen werden in ähnlicher Weise dekodiert und sequentiell derart geordnet, daß die gespeicherte Reihenfolge
wie folgt aussieht:
5 9 7
19 17 12 , 2 22
Der Interpreter 21 ruft die erste Funktion in der Reihenfolge auf, wobei es sich um den Platz 5 handelt. Er untersucht die
beiden davorliegenden Plätze, d.h. die Plätze 3 und 4, und entdeckt die Adresse 0 im Platz 4 und die Tatsache, daß der Platz
keine Operation enthält. Dies wird wie folgt interpretiert: Lade den Inhalt der Arbeitsspeicheradresse 0 in den Akkumulator
der Recheneinheit
Der Platz 5 fordert eine Multiplikation, und im Platz 6 steht eine 1. Dies wird wie folgt.interpretiert: Multipliziere den
Inhalt des Akkumulators mit den im Arbeitsspeicherplatz 1 gespeicherten Daten und speichere die Antwort in dem nächsten
verfügbaren Arbeitsspeicherplatz.
Dieser neue Speicherplatz wird als eine Adresse im Anweisungsspeicher gespeichert, und da sich kein arithmetischer Operator
vor dem Speicherplatz 4 befindet, wird diese Adresse im Speicherplatz 6 gespeichert, während ein Zeichen Null in die Plätze
4 und 5 gebracht wird. Diese Null ist ein Zeichenkode, der dem
309846/1071
Rechner mitteilt, daß er nichts unternehmen soll.
Dieselbe Sequenz wird für den Speicherplatz 9 verfolgt, mit der Ausnahme, daß die Adresse des Datenspeicherplatzes, in
dem das Ergebnis gespeichert wird, der Platz 8 ist, da der Interpreter 21 den Operator - im Speicherplatz 7 erkennt,
während die Speicherplätze 9 und 10 einen Null-Kode gespeichert haben.
Als Ergebnis der oben beschriebenen Interpretation enthalten somit die ersten elf Anweisungsspeicherplätze die folgenden
Zeichen:
Anweisungsplatz Zeichen
0 1
' 1 20
■3 'I'
4 null
5 null' .
6 8
7 -
8 9
" 9 null
10 null
11 )
Als nächster Operator im Folgespeicher wird jetzt der Speicherplatz
7 untersucht.
Der Interpreter 21 untersucht wiederum die Plätze vor dem Operator
und interpretiert das Ergebnis in der folgenden Weise:
30 9846/1 071
Lade die Daten im Speicherplatz 8 des Arbeitsspeichers 18 in den Akkumulator, subtrahiere die
Daten im Speicherplatz 9 und speichere das Ergebnis im Speicherplatz 10 des Arbeitsspeichers
Mit denselben Argumenten wie zuvor wird die Adresse des Arbeitsspeicherplatzes,
in dem sich die Antowrt befindet, im Speicherplatz 8 des Anweisungsspeichers gespeichert.
Dieselbe Prozedur wird für die nächsten Dateneinheiten sequentiell
wiederholt, bei denen es sich um die Operationen handelt, die durch die Plätze 15, 19 und 17 des Anweisungsspeichers gegeben
sind.
Nach den Operationen hat der Anweisungsspeicher den folgenden
Zustand:
0 1
1 20
2 I =
3 (
4 null
5 " null
6 null
7 null
8 10
9 null
null
)
/
(
null
null
null
null
. 13
309846/1071
Anweisungsspeicherplatz Zeichen
1-9 null
20 null
21 )
22 j
Das Divisionszeichen im Platz 12 ist das nächste in der Reihenfolge,
und der Interpreter 21 schreitet im Folgespeicher zurück, um den Datenspeicherplatz 10 zu finden.
Dies wird wie folgt interpretiert: Lade den Akkumulator mit den Daten im Datenspeicherplatz 10.
Dieser wird dann durch die Daten im Datenspeicherplatz 13 dividiert,
und die Antwort in den Datenspeicherplatz 13 gegeben und die anderen Plätze nullgesetzt.
Das Zeichen := im Platz 2 ist die nächste in der Reihenfolge
zu untersuchende Dateneinheit« Sie wird wie folgt interpretiert: Finde den Datenspeicherplatz, dessen Adresse j.m Anweisungsspeicher
verbleibt, und transferiere diese Daten zum Hauptspeicher und bringe sie in den Speicherplatz 1 der Seite
Das Zeichen j im Platz 22 ist das Abschlußzeichen :in der Reihenfolge.
Dies wird wie folgt interpretiert; Lies die nächste Anweisung im Amweisisigsspeicher.
Ein Rechner der den oben beschriebenen Vorgang verwirklicht ist
in der Fig. 1 dargestellt»
Im -Vorstehenden ist ein Digitalrechner beschriften, eier eine :
kompakte Form einer h©e!i§tisfiLgen Sprach© benutzte Di© folgende
Beschreibung bezieht sich in Yerbinduag mit Figo 2 auf andere
Verfahren zur gerätetecbaisehea DurelaftHärmag ela©s derartigen Rechners.
07 1
Der Datentransfer zwischen den verschiedenen Teilen des Rechners erfolgt wiederum über eine Digitalstraße 10a. Die Eingabe/Ausgabe
11a und der Hauptspeicher 12a sind an diese Digitalstraße
angesc4ilossen.
Die kompakte Form der hochstufigen Sprache führt zu Anweisungen
in einer hochstufigen Sprache, die entsprechend dem folgenden Beispiel reduziert werden.
Die Anweisung a: =b χ c + d χ e/f - gj wird gespeichert, wobei
a, b, c, d, e, f und g durch ein oder mehrere Bytes (mit 8 Bits) ersetzt werden, die die Adresse von diesen Variablen im Hauptspeicher
12a darstellen, während die Operatoren := + - χ / durch einen 1-Byte-Operatorkode ersetzt werden.
Es ist Jetzt erforderlich, die Folge von Adressen und Operatoren
.in eine Fora zu ferlegen, die zwecks Verarbeitung für die Logik
des Rechners geeignet ist.
Dies wird wie folgt durchgeführts
Wie in der vorangegangenen Beschreibung wird ein Parameterspeicher
15a, ein Anweisungsspeicher 14a und ein Folgespeicher 17a verwendet. Eine Anzahl von Logikschaltungen wird benutzt, um
jede Adresse und jeden Operator derart weiterzuleiten, daß die Adressen im Parameterspeicher 15a in derjenigen Reihenfolge erscheinen,
in der die Daten benötigt werden, während die Operatoren im Anweisungsspeicher 14a angeordnet werden.
Die Reihenfolge wird unter der Steuerung der Folgedekodierlogik 16a in Übereinstimmung mit den folgenden Regeln bestimmt:
(1) Jedem Operator wird eine Prioritätsstufe gegeben.
(2) Der erste Operator nach dem Operator ;» wird in den Folgespeicher
17a gegeben. Der Einfachheit halber wird dieser Operator durch das Symbol 0s1 gekennzeichnet.
309846/1071
(3) Der nächste Operator in der Anweisung, der ON bezeichnet
wird, wird mit Os1 verglichens und falls die. Prioritätsstufe von OsI höher oder gleich der Frioritätsstufe von
ON ist, wird 0s1 in den nächsten verfügbaren Platz des Anweisungsspeichers 14a gegeben. ON wird dann in den Folgespeicher
17a gebracht und wird zu 0s1.
(4) Wenn 0s1 eine geringere Priorität als ON hat, wird ON in
den Folgespeicher 17a gegeben und wird zu 0s2.
(5) Der nächste Operator ON wird dann mit Osp verglichen, wobei ρ = 1 oder 2 istp und falls die Priorität von Osp
höher oder gleich der Priorität von ON ist, wird Osp in den Anweisungsspeicher 14a gebracht und ON mit Os(p-1)
verglichen. Falls Os(p-1) eine Priorität hat, die höher
oder gleich der Priorität von ON ist, wird Os(p-1) in den
Anweisungsspeicher 14a gebracht.
Falls ON eine höhere Priorität als Osp hat, wird er zu
Osp+1 im Folgespeicher 17a. Falls ON von einer höheren
Priorität als Os(p-1) ist, wird er als Osp in den Folgespeicher
gebracht. Dieser Vorgang wird aufeinanderfolgend für jeden Operator wiederholt.
(6) Die Adressen von Variablen nach dem Operator := werden in
derjenigen Reihenfolge in den Parameterspeicher 15a gebracht,
in der sie auftreten, und ein Lade-Operator wird
in den Anweisungsspeicher 14a gegeben. Die Adresse der
Variablen vor dem Operator ;■« wird in einen reservierten
Platz des Parameterspeichers 15a gegeben. Diese Folge von
Operationen wird am besten an Hand eines Beispiels beschrieben. Hierzu wird das folgende, bereits benutzte Bei
spiel verwendet:
a: a b χ c + d χ e/f - gj
Die Prioritätsstufe für die Operatoren in ALGOL ist wie
folgt gegeben:
3θ'984β/1071
Stufe Operatoren C ( ϊ ϊ= else (sonst) then (dann) begin (Beginn) <
if (wenn) goto (Sprung nach) ] ) end (Ende)> ΞΞϋΞ
3 V A
> << + ' χ /
Die Schritte der Sequenzbildung sind dass ι
Unter der Annahme, daB A, B$ Cs B9 E, F und G die
Adressen der Variablen a, b, c, d, e, £ wad g sind,
wird die Anweisung wie folgt gespeichert; A :=BxC + Dx E/F - G ; A wird untersucht, und da es sich vor := befindet, wird
es in den reservierten Platz im Parameterspeicher 15a gebracht.
Die übrige Folge lautet:
B χ C + D χ E/F - Gf
B wird in den Parameterspeicfeer 15te gebracht, Lade (L)
wird in UQn Anwelsisiigsspeicher 14a gegeben und χ kommt
In den Folgespeicher 17a.
Die Situation ist somit die folgende: 309848/1071
Parameterspeicher B A(in einem reservierten Platz) Anweisungsspeicher L
Folgespeicher χ
Folgespeicher χ
C wird in den Parameterspeicher und L in den Anweisungsspeicher
gebracht. + wird mit χ verglichen, und da es eine geringere Priorität als χ hat, wird der x-Operator in den Anweisungsspeicher gebracht. + kommt in den Folgespeicher. Die Situation
ist dann die folgende:
Parameterspeicher BC A
Anweisungsspeicher LL χ
Folgespeicher +
Anweisungsspeicher LL χ
Folgespeicher +
D kommt in den Parameterspeicher und L in den Anweisungsspeicher. Da χ eine höhere Priorität als + hat, kommt χ in den
Folgespeicher. E wird in den Parameterspeicher und L in den Anweisungsspeicher gebracht.
Es ergibt sich dann die folgende Situation:
Es ergibt sich dann die folgende Situation:
Parameterspeicher BCDE A Anweisungsspeicher LLxLL
Folgespeicher +x
Folgespeicher +x
/ wird mit χ verglichen, und da χ von gleicher Priorität ist,
wird χ in den Anweisungsspeicher gegeben. / wird dann mit + verglichen, und da + eine geringere Priorität hat, wird / in
den Folgespeicher gebracht.
Die Situation ist dann wie folgts
Parameterspeicher BCDE A
Anweisungsspeicher LLxLL χ
Folgespeicher + /
Folgespeicher + /
F wird in den Parameterspeieher und L in den Anweisungsspei- "
eher gegeben. - wird mit / verglichen t und da / eine höhere
Priorität hat,-kommt / in den ikm*©igungsspeich<§2V - wird dann
mit + verglichen, und da -fr-di© gleiefe© Priorität wie - hat,
kommt + in den AnweisungsspeieSaero ~ wird daaa -in den Folgespeicher gebracht,
30 98 48 / 1 0.7 1
Es ergibt sich somit die folgende Situation:
Parameterspeicher BCDEF A
Anweisungsspeicher LLxLLxL/+
Folgespeicher -
Folgespeicher -
G wird in den Parameterspeieher und L in den Anweisungsspeicher gegeben. ; wird verglichen mit -f und da - eine höhere
Priorität, als ; hat, wird - in den Anweisungsspeicher gegeben. ; ist das letzte Zeichen in der Anweisung, und sobald der
Folgespeicher leer ist, wird ; in den Anweisungsspeicher gegeben.
Man erhält dann die folgende Situations
Parameterspeicher BCDEFG A
Anweisungsspeicher LLxLLxL/+L-j Folgespeicher
Ein anderes Verfahren besteht darin, den Parameterspeicher 15a
wegzulassen und die Adresse in den Anweisungsspeicher zu geben.
Wenn dies getan wird, enthält der Anweisungsspeicher den folgenden Ausdruck:
BCxDExF/+G-;A
Dies ist die sog. umgekehrte polnische Schreibweise für den Ausdruck.
Eine weitere Alternative besteht darin, ein Rechenprogramm zur Ausführung der obigen Folge von Operationen zu verwenden und
die sich ergebende Zeichenkette in der kompakten Form zu speichern.
Nachdem die erforderliche Folge von Instruktionen erzeugt ist,
wirken diese wie folgt auf die Recheneinheit 20a ein:
1. Die in dem Anweisungsspeicher 14a enthaltene Operatorfolge wird sequentiell untersucht.
309846/1071
~ 34~ 23212B2
2. Wenn ein Lade-Operator (L) festgestellt wird, werden die
nächsten Daten, die unter der nächsten Adresse im Parameterspeicher 15a gespeichert sind, siam nächsten verfügbaren
Platz im Arbeitsspeicher 18a transferiert.
3. Wenn anstelle eines Lade-Operators ein anderer Operator nachgewiesen wird, benutzt die Recheneinheit 20a die Daten
im zweiten vom letzten und im letzten benutzten Platz im Arbeitsspeicher 18a und gibt die Antwort in denjenigen Platz,
der ursprünglich als der zvreite vom zuletzt benutzten Platz
im Arbeitsspeicher 18a bezeichnet ist.
4. Wenn der Operator f festgestellt wird, interpretiert dies der Interpreter 21a dahingehend, daß das Ergebnis in dem
Hauptspeicherplatz gespeichert werden soll, der in dem reservierten
Platz im Parameter speicher 15a gehalten wird.
Die oben beschriebene Folge ergibt sich, wenn man beispielsweise
die bereits oben genannte .Operatorkette betrachtet. Hierbei liegen die Verhältnisse wie folgt:
Parameter speicher BCDEFG A
Anweisungsspeicher LLxLLxL/ + L-;
Unter der Annahme, daß S^, Sg» S* ... Sn Plätze im Arbeitsspeicher
sind, ergibt sich die folgende Reihenfolge:
Operator L L |
Parameter speicher B |
Rechen einheit |
S1 b b |
S2 C |
71 | Sx Wirkung b(enthalten im Platz B) kommt in c kommt in S0 |
χ | b χ c | bc | b wird multipli ziert mit c und die Antwort kommt in S^ |
|||
■:L | D | be | d | d kommt in S^ | ||
L | E | bc | d | e e kommt in S, | ||
30.9 8 46 | /10 |
Operator Parameter- Rechen-Speicher einheit
L
/
/
d χ e be
be de de/f bc ae/t
Wirkung
d wird multipliziert mit e und die Antwort kommt in Sp
f f kommt in S3
de wird dividiert durch f und die Antwort kommt in
bc+de/f bc+de/f
bc+de/f g bc+de/f fec+de/f
de/f wird mit be addiert und die Antwort kommt in S1
g kommt in S2
g wird von
bc+de/f subtrahiert und die Antwort kommt in S.
bc+de/f subtrahiert und die Antwort kommt in S.
die Daten in
(bc+de/f) werden in den Hauptspeicherplatz A gebracht
Bisjetzt wurden lediglich arithmetische Anweisungen betrachtet.
Logische Anweisungen werden in der gleichen Weise behandelt.
Als Beispiel wird dia folgende logische Anweisung herangezogenj
y ΞΞ aAbVcA Γ d ;
Nach der Dekodierung wird daraus:
Parameterspeicher ABCD
AnweisurtessBeicfeer
Bie Behandlung in dsr Secheneinheit ist die gleiche wie oben
beschrieben, mit der Ausnahme, daß anstatt ein dyadisciier
Operator ein monadisciier Operator ist, der lediglich auf D üds
3093 48/1071
Unbedingte Sprunganweisungen von der Form wie goto (Sprung
nach) A werden durch den Interpreter in der Recheneinheit als "übermittle die Anweisung beginnend am Platz A" interpretiert.
Bedingte Ausdrücke von der Form
if (wenn) a> b then (dann) χ := y eise (sonst) χ := Z ;
werden wie folgt zerlegt:
Adreßspeicher ABxYxZ
Anweisungsspeicher LL > if (wenn) LL :* j
Der if (wenn) -Operator wird wie folgt interpretierti
Wenn der vorangegangene Ausdruck true (wahr) ist, dann fahre mit der Reihenfolge fort, wenn er false (falsch) ist, dann
finde den Operator, der dem Operator then (dann) folgt, und fahre während dieses Prozesses fort, inkrementiere den Adreßzähler
jedesmal, wenn ©in L»Operator festgestellt wird.
Der then (dann) Operator hat die Interpretation finde den Operator;
Schleifenanweisungen von der Form
for (für) a : = step (Schritt) C until (bis) d
werden durch den Interpreter in der Recheneinheit in die passende Arithmetik interpretiert, um die Instruktionen zu testen
und zu veranlassen, daß die Schleife beachtet wird.
Ein Rechner, der die obige Beschreibung gerätetechnisch verwirklicht,
ist in der Fig. 2 dargestellt.
301846/1071
Claims (4)
- PatentansprücheQy Digitalrechner mit einer Recheneinheit und einem Hauptspeicher für Digitaldaten in der Form von Anweisungen mit Operatoren und Parametern in einer kompakten hochstufigen Sprache,gekennzeichnet durch einen Anweisungsspeicher (14, 14a), einen Parameterspeicher (15, 15a), eine automatisch betriebsfähige Einrichtung zum Transfer von Operatoren oder alternativ von Operatoren und Parametern vom Hauptspeicher zum Anweisungsspeicher, eine automatisch betriebsfähige Einrichtung zum Transfer von Parametern vom Hauptspeicher zum Parameterspeicher in der sequentiellen Reihenfolge, in der sie in der Anweisung auftreten, eine Folgedekodierlogik (16, 16a) zur automatischen Untersuchung der Operatoren in dem Anweisungsspeicher zwecks Bestimmung ihrer Prioritätsstufen, einen Folgespeicher (17, 17a) empfangend den Ausgang der Folgedekodierlogik zum Zwecke der automatischen Speicherung der Operatoren entsprechend den ihnen zugeordneten Prioritäten und eine Mikroprogrammanordnung (19, 19a), die in Abhängigkeit vom Inhalt des Folgespeichers automatisch setzbar und automatisch betriebsfähig ist, um die Recheneinheit zur Verarbeitung der Digitaldaten zu steuern, die ihr unter der Steuerung des Parameterspeichers und in Übereinstimmung mit dem in der Mikroprogrammanordnung aufgestellten Mikroprogramm automatisch zugeführt werden.
- 2. Digitalrechner mit einer Recheneinheit und einem Hauptspeicher für Digitaldaten in der Form von Anweisungen mit Operatoren und Parametern in einer kompakten hochstufigen Sprache, gekennzeichnet durch Operatoren und Parameter mit einer Kodierung variabler Länge, die durch den Benutzungsumfang der Operatoren und Parameter bestimmt ist und im allgemeinen in .umgekehrter Beziehung zu diesem Benutzungsumfang steht, einen Anweisungsspeicher (14,14a), einen Parameterspeicher (15, 15a), eine automatisch betriebs-309846/10712321282fähige Einrichtimg zum Transfer von Operatoren oder von Operatoren und Parametern variabler Länge vom Hauptspeicher zum Anweisüngsspeicher, eine automatisch betriebsfähige Einrichtung zum Transfer von Parametern variabler Länge vom Hauptspeicher zum Parameterspeicher in der sequentiellen Reihenfolge, in der sie in der Anweisung auftreten, eine Folgedekodierlogik (16, 16a) zur automatischen Untersuchung der Operatoren im Anweisungsspeicher zwecks Bestimmung ihrer Prioritätsstufen, einen Folgespeicher (17, 17a) empfangend den Ausgang der Folgedekodierlogik zum Zwecke der automatischen Speicherung der Operatoren in Übereinstimmung mit den ihnen zugeordneten Prioritäten und eine Mikroprogrammanordnung (19, 19a), die in Abhängigkeit vom Inhalt des Folgespeichers automatisch setzbar und automatisch betriebsfähig ist, um die Recheneinheit zur Verarbeitung der Digitaldaten zu steuern* die ihr automatisch unter der Steuerung des Parameterspeichers und in Über-. einstimmung mit dem in der Mikroprogrammanordnung aufgestellten Mikroprogramm zugeführt werden.
- 3. Digitalrechner nach Anspruch 1 oder 2,d ad urch gekennzeichnet, daß eine Parameterdekodierlogik vorgesehen ist, die aufeinanderfolgende Parametereinheiten zwischen Operatoren feststellt, um automatisch die Anzahl von Parametereinheiten zu bestimmen, die zur Bildung eines Parameters verwendet werden.
- 4. Digitalrechner nach Anspruch 3,d a d uF c h gekennzei ca net, daß sich die Parameterdekodier logik und die Folgedekodierlogik in gemeinsame Elemente teilen.30 98 4-6/107
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1979372 | 1972-04-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
DE2321262A1 true DE2321262A1 (de) | 1973-11-15 |
Family
ID=10135314
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE2321262A Pending DE2321262A1 (de) | 1972-04-28 | 1973-04-27 | Digitalrechner |
Country Status (5)
Country | Link |
---|---|
DE (1) | DE2321262A1 (de) |
FR (1) | FR2182569A5 (de) |
IL (1) | IL42113A (de) |
IT (1) | IT980931B (de) |
NL (1) | NL7305927A (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0025952A2 (de) * | 1979-09-24 | 1981-04-01 | Siemens Aktiengesellschaft | Schaltungsanordnung für einen Mikrocomputer mit Interpretorspeicher |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AT336928B (de) * | 1975-04-28 | 1977-06-10 | Ibm Oesterreich | Schaltungsanordnung zum ubersetzen von programmtexten |
-
1973
- 1973-04-26 IL IL42113A patent/IL42113A/en unknown
- 1973-04-27 FR FR7315547A patent/FR2182569A5/fr not_active Expired
- 1973-04-27 DE DE2321262A patent/DE2321262A1/de active Pending
- 1973-04-27 NL NL7305927A patent/NL7305927A/xx unknown
- 1973-04-30 IT IT68200/73A patent/IT980931B/it active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0025952A2 (de) * | 1979-09-24 | 1981-04-01 | Siemens Aktiengesellschaft | Schaltungsanordnung für einen Mikrocomputer mit Interpretorspeicher |
EP0025952A3 (en) * | 1979-09-24 | 1982-04-07 | Siemens Aktiengesellschaft Berlin Und Munchen | Circuit arrangement for a microcomputer |
Also Published As
Publication number | Publication date |
---|---|
IL42113A0 (en) | 1973-07-30 |
NL7305927A (de) | 1973-10-30 |
FR2182569A5 (de) | 1973-12-07 |
IT980931B (it) | 1974-10-10 |
IL42113A (en) | 1976-02-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE2704842C2 (de) | Im Pipeline-Betrieb arbeitende Datenverarbeitungseinrichtung | |
DE69735342T2 (de) | Binärprogrammkonvertiergerät und -verfahren | |
DE69726339T2 (de) | Verfahren und Apparat zur Sprachübersetzung | |
DE2451982C2 (de) | ||
DE1549523B2 (de) | Datenverarbeitungsanlage | |
DE2505384A1 (de) | Steuerteil fuer eine elektronische datenverarbeitungsanlage | |
DE2847934A1 (de) | Datenverarbeitungseinrichtung mit einem mikrobefehlsspeicher | |
DE2054835A1 (de) | Prozessor fur ein Informationsver arbeitungssystem und ein Betriebsver fahren fur diesen Prozessor | |
DE2023354A1 (de) | Programmierbare Einheit und Verfahren zum Betreiben einer programmierbaren Einheit | |
DE19524402C2 (de) | Programmausführungssteuereinrichtung mit einer Adressierbarkeit entsprechend einer M-reihigen Pseudo-Zufallszahlenfolge | |
DE1236834B (de) | Rechengeraet | |
DE2054947A1 (de) | Adressenvorbereitungseinnchtung und verfahren und Speicherzugnffan forderungseinnchtung fur ein Infor mationsver arbeitungssystem | |
EP1497722B1 (de) | Optimierung von compilergeneriertem programmcode | |
DE3043653A1 (de) | Datenverarbeitungsanlage | |
DE2458096A1 (de) | Mikroprogramm-ladeeinrichtung fuer die ladezeit-festlegung | |
DE2405858A1 (de) | Normalisierendes verschiebezaehlernetzwerk | |
DE2900586C2 (de) | Anordnung zum Decodieren von Codewörtern variabler Länge | |
DE2364865A1 (de) | Erweitertes speicheradressenbildungssystem eines digitalen rechnersystems | |
DE2321262A1 (de) | Digitalrechner | |
DE2513181B2 (de) | Elektronischer Rechner | |
DE2047095A1 (de) | Elektronisches Datenverarbeitungs system | |
DE2952689C2 (de) | ||
DE19617842A1 (de) | Verfahren zur Codetransformation | |
DE10141999A1 (de) | Compiler zur Erzeugung von RISC-Maschinencode, wobei Operationen an im Quellcode geschriebenen BIT-Variablen durch Bearbeitung auf der Grundlage von BIT-Beurteilungsoperationen zur Verringerung des Maschinencodeumfangs ausgeführt werden | |
DE2613703C2 (de) | Schaltungsanordnung zum Übersetzen von Programmtexten |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OHJ | Non-payment of the annual fee |