Transport kann vom Akku zu Schnellspeicherzellen, Akku zu
Trommelspeicherzellen und umgekehrt, sowie von Trommelspeicherzellen zu
Schnellspeicherzellen erfolgen.
Elementare Rechenoperationen sind Addition, Subtraktion, Intersektion
(logisches UND) und Disjunktion (logisches ODER) nur für ganze Zahlen.
(Gleitkommaoperationen werden über Grundprogramm-Unterprogramme gemacht.)
Extern | Intern | Wirkung | Bemerkungen | |
---|---|---|---|---|
Am | AKm+0 A0+m | , m≤31 , m≥32 | ‹a› + ‹m›→ a | Addiere |
Sm | ASKm+0 AS0+m | , m≤31 , m≥32 | ‹a› − ‹m›→ a | Subtrahiere |
Bm | AKm+0 NA0+m | , m≤31 , m≥32 | ‹m›→ a | Bringe |
NSm | NASKm+0 NAS0+m | , m≤31 , m≥32 | −‹m›→ a | |
Im | UAKm+0 UA0+m | , m≤31 , m≥32 | ‹m› ^ ‹a›→ a | Intersektion, UND |
Is+t | UAs+t UAs+t | , m≤31 , m≥32 | ‹s› v ‹a›→ a | Disjunktion, ODER |
Um | UKm+0 U0+m | , m≤31 , m≥32 | ‹a›→ m | Umspeichern; ‹a›→ a |
Tm | NUKm+0 NU0+m | , m≤31 , m≥32 | ‹a›→ m ; 0→ a | Transportiere |
Us+t | Us+t | ‹a›→ s,t | ‹a›→ a | |
Ts+t | NUs+t | ‹a›→ s,t ; 0→ a | ||
As+t | As+t | ‹s› + ‹t›→ s | ‹a›→ a | |
Ss+t | ASs+t | ‹s› − ‹t›→ s | ‹a›→ a | |
Bs+t | NAs+t | ‹t›→ s | ‹a›→ a | |
NSs+t | NASs+t | −‹t›→ s | ‹a›→ a |
Bei diesen Befehlen werden die untersten 19 Bits, das sind Trommelspeicheradresse, Schnellspeicheradresse und das Befehlsbit V zusammen als natürliche Zahl (n) interpretiert. Diese kann damit im Bereich 0 ≤ n ≤ 524287 liegen. Bestimmend für diese Befehle ist das Befehlsbit C (wie »Cahl«).
Extern | Intern | Wirkung | Bemerkungen | |
---|---|---|---|---|
CAn | CAn | ‹a› + n→ a | Addiere Zahl | |
CSn | CASn | ‹a› − n→ a | Subtrahiere Zahl | |
CBn | CNAn | n→ a | Bringe Zahl | |
CNSn | CNASn | −n→ a |
Mit einem Sprungbefehl wird der normale fortlaufende Befehlsablauf unterbrochen und zu einer im Sprungbefehl angegebenen Adresse »gesprungen«. Unter dieser Adresse sollte wieder ein Befehl, normalerweise der Anfang eines Programmstücks liegen.
Oft ist ein Sprungbefehl mit einer Bedingung versehen (siehe eigene Tabelle), was programmtechnisch eine Verzweigung bedeutet: Entweder wird – bei erfüllter Bedinung – zu einem anderen Programmteil gesprungen, oder – bei unerfüllter Bedingung – es geht direkt hinter dem nicht ausgeführten Sprungbefehl weiter.
Extern | Intern | Wirkung | Bemerkungen | |
---|---|---|---|---|
Em | Km+0 0+m | , m≤31 , m≥32 | ‹m›→ b ; Em+1'→ c | Sprungbefehl |
NEm | NEm+0 N0+m | , m≤31 , m≥32 | 0→ a ; ‹m›→ b ; Em+1'→ c | Sprung mit Nullsetzen |
Es+t | s+t | ‹s› v ‹t›→ b ; Es+[t+1']→ c | selten | |
Fm | FKm+0 F0+m | , m≤31 , m≥32 | ‹m›→ b ; ‹c›→ 5 ; Em+1'→ c | Unterprogrammsprung |
NFm | NFKm+0 NF0+m | , m≤31 , m≥32 | ‹m›→ b ; 0→ a; ‹c›→ 5 ; Em+1'→ c | Unterprogrammsprung mit Nullsetzen |
Das Besondere an dem F-Befehl ist, dass zwar wie beim E-Befehl zu einem anderen Programmteil (Unterprogramm) gesprungen wird, aber der im Befehlszählregister stehende Befehl in den Schnellspeicher 5 gebracht wird; dieser Befehl ist aber der Sprungbefehl auf den eigentlich nächsten Befehl, wenn nicht weggesprungen würde. Wird später in dem Unterprogramm der Befehl E5 gegeben, so führt dies dazu, dass der dort aufgehobene Sprungbefehl ausgeführt und damit hinter die verlassene Stelle zurückgekehrt wird.
Einige Elementarbefehle können sinnvoll fast jedem anderen Befehl hinzugefügt werden.
Befehl | Wirkung | bei Übernahme ins Befehlszählregister | Bemerkung |
---|---|---|---|
N | 0→ a | wird gelöscht | je nach Befehl vor oder nach dem Befehl ... wirksam, deshalb schon bei den einzelnen Befehlen mit erklärt |
H | 1→ 338 | bleibt erhalten | kann anschließend mit Bedingung Y abgefragt werden |
Z | Stop, bevor Befehl ausgeführt wird | wird gelöscht | Die Maschine stoppt VOR der Ausführung des Befehls. Mit »WEITER« oder »START« auf dem Bedienungspult wird der Befehl ausgeführt (und bei START die weiteren) |
LL, R, V | Verschieben von ‹a› und evtl. ‹3› | bleiben erhalten | Schiebefehle, in einer eigenen Tabelle erklärt |
PP, QQ, P, Q, Y | damit versehener Befehl wird nur ausgeführt, wenn bestimmte Bedingung erfüllt ist | werden gelöscht | Bedingungsbefehle, in einer eigenen Tabelle erklärt |
Schiebebefehle können den meisten Befehlen hinzugefügt werden. Zusätzlich zu der normalen Wirkung des dabeistehenden Befehls verschieben sie den Inhalt des Akkus und evtl. des Schnellspeichers 3 um 1 oder 2 Bits nach links oder rechts.
Ist der dabeistehende Befehl U, so wird er vor der Verschiebung wirksam; es wird also der unverschobene Inhalt des Akku gespeichert. Andere dabeistehendeBefehle werden nach der Verschiebung wirksam.
Auf ganze Zahlen angewendet bewirkt ein Links-Schiebebefehl eine Multiplikation mit 2 oder 4, ein Rechts-Schiebebefehl eine abgerundete Division durch 2.
Meistens werden Schiebebefehle zur internen Bearbeitung von Informationsteilen eingesetzt.
Extern | Intern | Wirkung |
---|---|---|
R... | R... | ‹a› um 1 Bit nach rechts verschieben; ‹a›38 geht verloren; ‹a›1 wird »nachgezogen«, dh. wird auf seinen Wert vor der Verschiebung gesetzt; bewirkt bei Ganzzahlen eine abgerundete Division durch 2 |
L... | LLR... | ‹a› um 1 Bit nach links verschieben; ‹a›1 geht verloren; 0→ ‹a›38 bewirkt bei Ganzzahlen eine Multiplikation mit 2 |
LL... | LL... | ‹a› um 2 Bits nach links verschieben; ‹a›1 und ‹a›2 gehen verloren; 0→ ‹a›37 ; 0→ ‹a›38 bewirkt bei Ganzzahlen eine Multiplikation mit 4 |
RV... | RV... | ‹a› (»linker Akku«) und ‹3› (»rechter Akku«) zusammen verkoppelt um 1 Bit nach rechts verschieben; ‹3›38 geht verloren; ‹a›38→ ‹3›1 ‹a›1 wird »nachgezogen«, dh. wird auf seinen Wert vor der Verschiebung gesetzt; bewirkt bei einer doppellangen Ganzzahl in ‹a,3› eine abgerundete Division durch 2 |
LV... | LLRV... | ‹a› (»linker Akku«) und ‹3› (»rechter Akku«) zusammen verkoppelt um 1 Bit nach links verschieben; ‹a›1 geht verloren; ‹3›1→ ‹a›38 ; 0→ ‹3›38 bewirkt bei einer doppellgangen Ganzzahl in ‹a,3› eine Multiplikation mit 2 |
Der Befehl LLV..., also eine Verschiebung in Akku und Schnellspeicher 3 um 2 Bits, ist nicht erlaubt.
Sollen in einem mehrfach durchlaufenen Programmteil (Unterprogramm, Schleife) mit demselben Befehl nacheinander verschiedene Trommelspeicherzellen angesprochen werden, muss die Trommelspeicheradresse variabel sein. Diesem Zweck dienen die durch G gekennzeichneten Adresssubstitutions-Befehle (G-Befehle). G kann vielen Befehlen hinzugefügt werden.
Die eigentliche, immer wieder zu ändernde, Trommelspeicheradresse wird ihrerseits in eine Speicherzelle (Schnellspeicher oder Trommel) gelegt und dort von Fall zu Fall modifiziert. Der G-Befehl bestimmt in einem ersten Schritt daraus die eigentlich zu verwendende Trommelspeicheradresse und führt in einem zweiten Schritt den beistehenden Befehl mit dieser Trommelspeicheradresse aus.
Weil der G-Befehl einen Takt länger dauert als normale Befehle, ist es aus zeitlichen Gründen (hier nicht näher erläutert) notwendig, im Programmablauf eine Trommelspeicherzelle zu überspringen. Deshalb muss der Programmierer nach einem G-Befehl immer eine beliebige Information schreiben, die bei der Programmausführung automatisch übergangen wird.
Extern | Intern | Wirkung | Bemerkungen | |
---|---|---|---|---|
G...t | ...GKm+0 ...G0+t | , m≤31 , m≥32 | ‹c› + 1→ c ; t* = ‹t›t ; ausführen: ...t* | Die Trommelspeicher-Variable liegt in einer Trommelspeicherzelle t; sie bleibt durch den Befehl unverändert; sie ist ggf. an anderer Stelle des Programms explizit zu modifizieren. |
GK...s+n | ...GKs+n | ‹c› + 1→ c ; t* = ( ‹s›+n )t ; ausführen: ...0+t* | Die Trommelspeicher-Variable liegt in einer Schnellspeicherzelle s; sie wird nur für die Befehlsausführung um n erhöht; das heißt, es wird auf eine um n weiter hinten liegende Trommelzelle zugegriffen; die modifizierte Adresse wird aber nicht in s gespeichert; ‹s› bleibt unverändert. | |
CGK...s+n | C...GKs+n | ‹c› + 1→ c ; t* = ( ‹s›+n )t ; ‹s› + n→ s ; ausführen: ...0+t* | Die Trommelspeicher-Variable liegt in einer Schnellspeicherzelle s; sie wird um n erhöht; das heißt, es wird auf eine um n weiter hinten liegende Trommelzelle zugegriffen; die modifizierte Adresse wird in s gespeichert, sodass der Befehl auf eine jedes weitere Mal um n weiter hinten liegende Trommelzelle zugreift. Mit n=1, also dem Befehl CGK...s+1 , verarbeitet man aufeinander folgende Speicherzellen. | |
CG...s+n | C...Gs+n | ‹c› + 1→ c ; n* = ( ‹s›+n )t ; ‹s› + n→ s ; ausführen: C...n* | Die Variable liegt in einer Schnellspeicherzelle s und wird um n erhöht und s damit modifiziert. ‹s› wird aber nicht als Adresse interpretiert, sondern als Zahl Ausgeführt wird ein Ganzzahl-Befehl mit der Variablen. Mit n=1, also dem Befehl CGs+1 , wird jedes Mal in der Schnellspeicherzelle s um 1 hochgezählt, ohne dass auf einen anderen Speicherinhalt zugegriffen wird. |
Jedem Befehl, nicht nur Sprungbefehlen, können ein oder mehrere der 5 Bedingungsbefehle hinzugefügt werden. Die Bedingugen betreffen den Inhalt von Akku, Schnellspeicher 2 oder Schnellspeicher 3; im Bedienungspult geben die Signallampen T2, T3, T4 und T40 Auskunft über die bedingungsrelevanten Inhalte. Vor der Befehlsausführung werden die betreffenden Bedingungen geprüft; nur wenn alle erfüllt sind, wird der Befehl ausgeführt, andernfalls wird der Befehl übergangen (logisches UND).
Befehl | Wirkung | Bedingung | Bedingung im Bedienungspult |
---|---|---|---|
PP... | Befehl ... nur ausführen, wenn Bedingung erfüllt ist; sonst nur ‹c›→ b | ‹a› ≥ 0 | T4 aus |
QQ... | ‹a› < 0 | T4 ein | |
PPQQ... | ‹a› = 0 | T40 aus | |
PQQQ... | ‹a›1 ≠ ‹a›2, dh. ‹a› ist Befehl oder Text | ||
P... | ‹2› ≥ 0 | T2 aus | |
Q... | ‹2› < 0 | T2 ein | |
Y... | ‹3›38 = 1, d.h. ‹3› ist ungerade | T3 ein |
Um einen einzelnen Befehl mehrmals hintereinander auszuführen, gibt es zwei Möglichkeiten:
Extern | Intern | Beschreibung |
---|---|---|
Es−n | EK(s−1)+(8192−t) | Wirkung: Im Schnellspeicher (s−1) steht ein Befehl; dieser wird n-mal ausgeführt. Im Schnellspeicher (s) muss ein Sprungbefehl zurück ins Programm stehen. Erklärung: Der Befehl EK(s−1)... holt den Befehl aus dem Schnellspeicher (s−1) ins Befehlsregister, wo er ausgeführt wird; die Trommelspeicheradresse ... spielt wegen K dabei keine Rolle. Bei jeder dieser Ausführungen wird die Trommelspeicheradresse aber über das Befehlszählregister um 1 erhöht. Sobald die Trommelspeicheradresse 8192 erreicht, läuft der Trommeladressteil über, das heißt, er wird zu Null und der Übertrag wird als 1 zur Schnellspeicheradresse addiert. Damit wird als nächstes der Befehl EKs+0 ausgeführt, womit der in der Schnellspeicherzelle s stehende Befehl geholt und ausgeführt wird. Besonders geeignet für diese Verfahren sind die Schnellspeicher 15 und 16: Der Schnellspeicher 16 ist nämlich identisch mit dem Schnellspeicher 5 und nimmt wie dieser bei Unterprogramm-Sprungbefehlen F... den Rückkehrbefehl auf. So genügt es, den zu wiederholenden Befehl nach Schnellspeicher 15 zu tun und dann den Befehl Fs-n zu geben. Es erübrigt sich, die Rückkehr ins Programm explizit in den nächsten Schnellspeicher (16) zu bringen. |
PQ...s−n | PQ...K(s−1)+(8192−n) s > 0 wenn 4096 ≤ n ≤ 8191 : Ausführen von ‹s−1› (siehe nebenstehend) wenn n < 4096 : unerfüllte Bedingung |
Wirkung: Der im Schnellspeicher (s−1) stehende Befehl wird n-mal ausgeführt, und zwar ohne Zwischentakte, das heißt doppelt so schnell wie der vorige Wiederholungsbefehl. Erreicht wird das dadurch, dass der Befehl auf einem eigenen Weg parallel zum Befehlszählregister kreist, dabei aber durchaus der jedesmaligen Erhöhung um 1 unterliegt. Das Befehlszählregister bleibt solange »stehen« . Das Bit 26, das ist das oberste Bit der Trommelspeicheradresse, muss dazu gesetzt sein, das heißt, die Trommelspeicheradresse muss größer/gleich 4096 sein. Sobald die Trommelspeicheradresse 8192 erreicht, läuft der Trommeladressteil über, das heißt, er wird zu Null (dass der Schnellspeicherteil dabei um 1 erhöht wird, ist hier unwesentlich); es ist dann also auch das Bit 26 Null. Damit wirkt der Befehl als bedingter Befehl mit unerfüllter Bedingung, wird nicht ausgeführt; stattdessen kommt der im Befehlszählregister stehen gebliebene Befehl in Befehlsregister und der normale Befehlsablauf geht weiter. |
PQPPLVHAS...s−n PQYRVA...s−n |
wie zuvor | In Verbindung mit den Bedingungen PP bzw. Y hat der Wiederholungsbefehl ganz speziell geschaltete Wirkungen, eine (mit PP) für schnelle (ganzzahlige) Divisionen, die andere (mit Y) für schnelle (ganzzahlige) Multiplikationen. Im Grundprogramm werden sie für die Gleitkommadivision und -multiplikation mitbenutzt. Mit Beispielprogrammen, die solche Operationen enthalten, können Sie diese raffinierten Spezialbefehle hier Schritt für Schritt studieren (Gegebenenfalls in der Menüleiste auf »Grundprogramm folgen« umschalten!) |
Diese Befehle sind Unterprogrammsprünge (Befehl F...) in Teile des Grundprogramms. Sie dienen der Ein- und Ausgabe, sowie den Gleitkommaoperationen.
In dieser Simulation ist das originale Grundprogramm der Zuse Z22R vom Juni 1961 gespeichert.
Typisch für diese Befehle ist, das ein zu bearbeitender Wert (Operand) vor Aufruf des Befehls im Akku stehen muss, ein zweiter – wenn die Operation zwei Operanden verlangt – im Schnellspeicher 6. Nach Ausführung der Operation steht das Ergebnis sowohl im Akku, als auch im Schnellspeicher 6.
Bei der Ausführung dieser Befehle werden weitere Schnellspeicher und evtl. Trommelspeicherzellen verwendet; deren Inhalt geht für das aufrufende Programm verloren oder muss vor dem Befehlsaufruf in bestimmter Weise definiert sein. Welche das sind, ist im Einzelfall angegeben.
Wird bei einer solchen Operation der zulässige Zahlenbereich überschritten, wird »Bereichsüberschreitung« (BUEB) auf dem Fernschreiber gemeldet.
Zum Kennenlernen der Funktion von Gleitkommaoperationen, Einlesen, Ausdrucken ist das Durchlaufen dieser Unterprogramme interessant. Beim Ausprobieren der Beispiele oder eigener Programme kann das Durchlaufen vieler Befehle bei jeder Grundprogrammoperation langwierig werden. Deshalb kann man in der Menüleiste zwischen »Grundprogramm folgen« und »Grundprogramm verbergen« umschalten: Bei »Grundprogramm verbergen« werden Grundprogrammfunktionen nicht mit den originalen Unterprogrammen ausgeführt, sondern mit PHP-Imitationen; bei der Ausführung wirkt dann jede Grundprogrammoperation wie ein einziger Befehl.
In derselben Weise kann durch Zusatz des V-Befehlsbits zu einem Unterprogrammbefehl die PHP-Imitation für diesen einen Unterprogrammbefehl unabhängig von Einstellung »Grundprogramm folgen/verbergen« erreicht werden. Im Original hatte diese Befehlkombination keinen Sinn.
Deshalb ist der schrittweise Ablauf bei Grundprogrammbefehlen je nach Einstellung von »Grundprogramm folgen/verbergen« unterschiedlich:
Zunächst kommt man immer zu dem Unterprogrammsprung F... bzw. zu E0+1 beim Einlesen. Dann:Extern | Intern | Wirkung | Benutzte Speicher | Markierung in der Simulation | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+ | F0+348 | ‹6› + ‹a›→ a,6 | (Gleitkomma) | Ssp 3–10 | GK-Addition | |||||||||
- | F0+426 | ‹6› − ‹a›→ a,6 | (Gleitkomma) | Ssp 3–10 | GK-Subtraktion | |||||||||
X | F0+367 | ‹6› • ‹a›→ a,6 | (Gleitkomma) | Ssp 3–8 | GK-Multiplikation | |||||||||
: | F0+480 | ‹6› / ‹a›→ a,6 | (Gleitkomma) | Ssp 3–10 | GK-Division | |||||||||
M | F0+437 | −‹a›→ a,6 | (Gleitkomma) | Ssp 3–6 | GK-Negation | |||||||||
W | F0+963 |
| Ssp 3–10 Tsp 1039 | GK-Wurzel siehe auch 3) | ||||||||||
HW | HF0+963 |
| Ssp 3–10 Tsp 1039 | GK-Wurzel siehe auch 3) | ||||||||||
D | F0+644 | ‹a›→ FS,a,6 | (FS : Fernschreiber) | Ssp 3–10 Tsp –1041 | FS-Ausgabe siehe auch 1) | |||||||||
F800 | F0+800 | Spaltensprung→ FS ‹a›→ a,6 | Ssp 3–6,9 Tsp –1041 | FS-Spaltensprung | ||||||||||
F1000 | F0+1000 | Wagenrücklauf,Zeilenvorschub→ FS ‹a›→ a,6 | Ssp 3–6 Tsp –1041 | FS-NeueZeile | ||||||||||
F840 | F0+840 | −‹a› Zeichenbreiten→ FS 0→ ‹a› | Ssp 3–6,9 Tsp –1041 | FS-Einrücken | ||||||||||
HD HF800 HF1000 HF840 | HF0+644 HF0+800 HF0+1000 HF0+840 | wie zuvor, aber »schnelle« Ausgabe, d.h. auf einem Lochstreifenstanzer (nur wenn <1029> negativ, sonst auch normale Fernschreiberausgabe). | wie zuvor | wie zuvor | ||||||||||
E0+1 | E0+1 | Einlesen eines Lochstreifens über den mechanischen Lochstreifenabtaster | Ssp 2–15 Tsp –1027 | Einlesen siehe auch 2) | ||||||||||
HE0+1 | HE0+1 | Einlesen eines Lochstreifens über den schnellen photo- elektrischen Lochstreifenabtaster | wie zuvor | siehe 4) |
1) Die Art der Ausgabe wird durch den Inhalt der Trommelspeicherzellen 1029–1036 bestimmt. Siehe dazu ► Formatierung der Ausgabe.
4) Der photoelektrische Lochstreifenleser ist in dieser Simulation nicht realisiert.
Bandbefehle werden nicht in der Maschine gespeichert, sondern beim Einlesen eines Lochstreifens (»Band«) direkt wirksam. Sie sind im Zusammenhang mit dem Schreiben von Befehlen auf Lochstreifen unter ► Schreibweise von Befehlen erklärt