1. Rechnerarchitektur
Aufbau eines Rechners: EVA-Prinzip und Von-Neumann-Architektur – von der Theorie über das Rollenspiel bis zur Praxis mit „Johnny".
Theorie
Das EVA - Prinzip
EVA Prinzip
Mit einem Computer / Spielkonsole alleine kannst du noch wenig anfangen. Um die Geräte bedienen zu können, benötigst du Zubehör, welches du daran anschließen kannst.
Das Zubehör eines Computers nennt man auch Peripherie.
1. Aufgabe
2. Aufgabe
Nach der Eingabe passiert etwas im Computer. Wenn du bei einem Spiel auf dem Controller auf eine Taste drückst, springt die Spielfigur z.B. in die Luft.
Der Computer verarbeitet die Eingabe des Nutzers
Wenn man alles zusammenfasst, ergibt sich daraus das EVA-Prinzip:

3. Aufgabe
- Das EVA-Prinzip anhand von Alltagsgeräten.
Bestandteile eines Computers und deren Funktion
Eingabeeinheit:
Sie hat die Aufgabe, Eingaben an den Computer weiterzuleiten, indem sie diese an den E/A-Bus weitergibt. Von dort geht die Eingabe zuerst in den Arbeitsspeicher (RAM). Während der Ausführung eines Programms sind die Eingaben, die vom Programm zu verarbeitenden Daten. Während der Programmierung ist die Eingabe der Text des Programms, das von einem Editor (einem speziellen Textverarbeitungsprogramm) aufgenommen wird und dann von einem Compiler in Maschinenbefehle übersetzt wird.
Dies wollen wir aber hier noch nicht besprechen.
Ausgabeeinheit:
Sie dient dazu, die vom Computer erarbeiteten Ergebnisse wieder in eine für Menschen lesbare Form zu bringen (Bildschirm, Drucker, …). Sie erhält die Daten über den E/A-Bus aus dem Arbeitsspeicher.
Bus:
Das Bussystem eines Rechners ist dafür zuständig, Daten zwischen den einzelnen Einheiten des Computers zu transportieren. Daher auch der an einen Autobus erinnernde Begriff. Tatsächlich handelt es sich um eine gebündelte Datenleitung. In modernen Rechnern besteht das Bussystem aus mehreren unterschiedlichen Bussen mit unterschiedlichen Leistungsparametern. Der E/A-Bus ist für den Datentransport zwischen externen Geräten (Eingabe, Ausgabe, externe Speicher) und dem Arbeitsspeicher zuständig. Für die Kommunikation zwischen Arbeitsspeicher und den schnellen Registern der CPU sorgt der Daten- bzw. der Befehlsbus. Wir wollen in der Folge der Einfachheit halber allerdings nur von einem gemeinsamen Bus ausgehen.
Speicher
dienen dazu, Daten und Programme während einer Verarbeitung festzuhalten (Arbeitsspeicher) oder auch über längere Zeiträume verfügbar zu haben (Permanentspeicher). In ihrer Funktion sind alle Speicher gleich. Sie können sich Folgen von Nullen und Einsen „merken“. In ihrer Technologie und daher in ihrer Leistungscharakteristik unterscheiden sie sich jedoch einerseits bezüglich der Zeit, die es dauert einen Wert abzuspeichern oder wieder auszulesen und andererseits auch bezüglich ihrer Flüchtigkeit. Der Inhalt des Arbeitsspeichers und der Register verschwindet, wenn der Strom abgeschaltet wird. Der Inhalt von Magnetspeichern (etwa Festplatte, Diskette, USBStick, …) oder optischen Speichern (CD) bleibt jedoch erhalten, auch wenn kein Strom anliegt.
Register
sind schnelle Speicher in teurer Technologie gefertigt. Sie können mit der ALU Schritt halten, weil diese in derselben Technologie gefertigt ist.
Arbeitsspeicher / RAM:
Der Arbeitsspeicher ist jener Bereich, aus dem die CPU sowohl ihr Programm ausliest als auch die von diesem Programm zu verarbeitenden Daten. RAM steht für Random Access Memory. Dies bedeutet, dass die Zugriffsdauer von der konkreten Adresse, auf die zugegriffen wird, unabhängig ist. Früher waren diese Speicher in Magnetkern-Technologie ausgeführt. Heute sind Arbeitsspeicher Halbleiterspeicher, so wie die Register. Allerdings sind sie in einer langsameren und daher billigeren Technologie ausgeführt. Im Arbeitsspeicher stehen die von einem Programm zu verarbeitenden Daten an jenen Stellen, an die sie von diesem Programm eingelesen wurden wie auch das Programm selbst. Fertige Ergebnisse kommen wieder hierher zurück und können hier von der Ausgabe abgeholt werden. Hier werden Daten und Programme gespeichert.
Extern Speicher / Festplatte:
Die Festplatte kann als Standardbeispiel für externe Permanentspeicher angesehen werden. Informationen, die auf der Platte stehen, bleiben dort erhalten, auch wenn man den Rechner abschaltet. Die Platte ist allerdings kein Direktzugriffsspeicher und die Zugriffsdauer hängt davon ab, wo Information gerade auf der Platte steht und auch davon, auf welche Stelle der Platte zuletzt zugegriffen wurde. Selbstverständlich können auch auf der Platte beliebige Informationen abgespeichert werden. So etwa umfangreiche Datenfolgen, aus denen etwas zu berechnen ist (etwa die Buchhaltung eines Unternehmens) oder – wir haben die Formeln aus dem Mathematikunterricht ja auch vielleicht in einem Formelheftchen stehen – Programme, die
wir für unseren Rechner vorbereitet haben, die aber momentan nicht zur Ausführung gelangen. Doch so wie wir das Formelheftchen nicht rechnen lassen können, sondern erst die Formel lesen und verstehen müssen, damit wir im Kopf dann die zugehörigen Daten einsetzen und die Rechnung ausführen, müssen auch auf der Platte abgespeicherte Programme erst in den Rechner geladen werden, bevor sie ausgeführt werden können.
CPU:
Die Central Processing Unit ist der eigentliche Rechner im Computer. Sie besteht aus schnellen Registern, in denen Operanden auf denen die eigentlichen Befehle (Operatoren) ausgeführt werden, abgelegt sind, aus der ALU und aus dem Steuerwerk.
Rechenwerk / ALU:
Die Arithmetic Logical Unit ist der Kern der CPU und das eigentliche Rechenwerk. Hier werden die Befehle des Maschinenprogramms auf die der ALU zugeordneten Register ausgeführt. Also hier wird addiert, subtrahiert, multipliziert, … Aber es werden eben auch logische Berechnungen (und- sowie oder-Verknüpfungen) durchgeführt.
Das Steuerwerk
besteht im wesentlichen aus einem Befehlsregister und dem Befehlszähler. Es sorgt dafür, dass der jeweils als nächstes auszuführende Befehl aus dem Arbeitsspeicher (RAM) geholt wird und dieser, wenn es sich um einen arithmetischen oder logischen Befehl handelt, von der ALU ausgeführt wird. Wenn es sich um einen Befehl handelt, der den Programmablauf steuert (Verzweigung, Sprung), wird er nur im Steuerwerk ausgeführt.
Der Befehlszähler
ist ein Register, in dem die Speicheradresse des eben vom Steuerwerk aus dem RAM geholten Befehls steht. Ist dies ein arithmetischer oder logischer Befehl wird der Befehlszähler im Takt der Ausführung dieses Befehls so erhöht, dass er nun die Adresse des nächsten, im Speicher unmittelbar nachfolgenden Befehls enthält. Bei Sprungbefehlen wird er auf den Wert gesetzt, der als Sprungziel im Programm angegeben ist.
Praxis: Rollenspiel Von-Neumann-Rechner
Beispiel Programm
Beginnen wir mit der Formel
Beginnen wir mit dieser Formel und versuchen wir gemeinsam das zugehörige Programm zu entwickeln.
O = 2*( l * b + (l+b) * h)
Dazu ist erst wichtig, festzustellen, dass wir in der Formel 4 Variable haben (O, l, b, h), für die wir Speicherplatz reservieren müssen. Wir nehmen dabei an, dass wir für jede dieser Variablen, wie auch für jeden dann zu schreibenden Befehl ein Speicherwort benötigen. Also reservieren wir dafür in dem für unser Programm vorgesehenen Speicherbereich
S1 Platz für O
S2 Platz für l
S3 Platz für b
S4 Platz für h
Sodann stellen wir fest, dass wir wohl erst einmal die Werte für l, b und h von der Eingabeeinheit einlesen müssen. Also:
S5 LIES s2 lies l von Eingabeeinheit
S6 LIES s3 lies b von Eingabeeinheit
S7 LIES s4 lies h von Eingabeeinheit
An dieser Stelle können wir festhalten, dass unser Programm nicht sehr benutzerfreundlich ist, da wir uns merken müssen, in welcher Reihenfolge l, b und h eingegeben werden müssen. Das soll uns momentan aber noch nicht sehr stören.
Da wir nun die Daten dort haben, wo sie sein sollten, können wir nun mit der eigentlichen Berechnung beginnen.
S8 LADE s2, r1 lade Wert von l in Register 1
S9 LADE s3, r2 lade Wert von b in Register 2
S10 MULT r1, r2, r3 führe auf die in Register 1 und Register 2 gespeicherten Werte eine Multiplikation aus und schreibe das Ergebnis nach Register 3
Nun hängt es davon ab, wie viel Register unsere CPU hat ob wir die weiteren Werte in anderen noch freien Registern abspeichern können oder ob wir Zwischenergebnisse in den Speicher zurück schreiben und bei Bedarf frisch holen müssen. Wir nehmen an, wir hätten nur 3 Register, also müssen wir das Ergebnis der Multiplikation zurück schreiben. Dafür können wir die bisher noch unbenutzte Speicheradresse s1 verwenden.
S11 SPEICHERE r3, s1 speichere das Zwischenergebnis l*b einstweilen in die Speicherzelle s1
Als nächstes kommt wohl die Addition (l+b) an die Reihe. Doch da wir die Werte von l und b bereits in Registern haben, müssen wir sie nicht holen, sondern können sofort addieren.
S12 ADD r1, r2, r3 führe auf den noch immer in Register 1 und Register 2 gespeicherten Werten eine Addition aus und schreibe das Ergebnis nach Register 3
S13 LADE s4, r2 lade den Wert von h in das nun nicht mehr benötigte Register 2
S14 MULT r3, r2, r1 führe auf die in Register 3 (Zwischenergebnis des Klammerausdrucks) und Register 2 (Wert von h) gespeicherten Werte eine Multiplikation aus und schreibe das Ergebnis in das inzwischen nicht mehr benötigte Register 1
Wir haben somit in Register 1 den Flächeninhalt der Vorderseite und eines Seitenteile, also des halben Mantels stehen. Wir müssen nun noch den Flächeninhalt der Grundfläche, die wir zwischenzeitlich in Zelle s1 abgespeichert haben holen, addieren und die so erhaltene Fläche mit dem konstanten Wert 2 multiplizieren.
S15 LADE s1, r2 lädt das in s1 abgespeicherte Zwischenergebnis in das inzwischen nicht mehr benötigte Register 1
S16 ADD r1, r2, r3 addiert den in Register 1 gespeicherten Wert des halben Mantels zum eben in Register 2 geladenen Wert der Grundfläche. Somit steht nun der Wert der halben Oberfläche in Register 3
S17 MULT* r3, 2 Diese Multiplikation ist eigentlich ein neuer Befehl. Hier wird nicht mit einem in einer Variablen sondern mit der Konstanten „2“ multipliziert. Daher lautet der Befehlscode auch nicht MULT sondern MULT*.
Speziell die Multiplikation mit 2 ist eine wichtige Spezialoperation, da sie im Binärsystem sehr einfach durch ein Left-Shift des jeweiligen Registerinhalts bewirkt werden kann.
S18 SPEICHERE r3, s1 speichert das nunmehr in Register 3 enthaltene Endergebnis in die Zelle s1
S19 SCHREIB s1 gibt den in s1 enthaltenen Wert auf der Ausgabe aus.
S20 STOP beendet dieses Programm
Wenn Zeit ist, ist es sicherlich hilfreich hier die Frage zu provozieren, warum der Wert aus Register 3 erst noch nach Arbeitsspeicherzelle s1 geschrieben werden musste, bevor er ausgegeben werden konnte.
Die Antwort liegt in der unterschiedlichen Geschwindigkeit der Geräte. Ein-/Ausgabe ist langsam und erfolgt daher stets indirekt über den Arbeitsspeicher.
Anleitung Rollenspiel
Simulation des von Neumann-Rechners
Im Folgenden sollt ihr die Aufgabe dieses Rechners übernehmen indem jede Funktionseinheit im Computer durch eine Person besetzt wird. Das folgende Schema für die Animation zeigt die Aufteilung in die Aufgabenbereiche. Hierfür kann man entweder je Funktionseinheit einen Tisch verwenden, oder man stellt einige Tische zusammen, sodass der hellgelbe Bereich sich auf einem großen Tisch befindet.
Wesentlich ist dabei, dass die „CPU-Komponenten“ relativ nah nebeneinander sitzen. Der „Bus“ kann durchaus auch als Pendler zwischen Speicherbereich und CPU bzw. Speicherbereich und Ein- und Ausgabe eingesetzt werden. Das kostet allerdings Zeit.

Bevor wir versuchen, auch für die Flächenberechnung des Dreiecks ein Programm zu schreiben, wollen wir das Oberflächenprogramm auf einem von euch nachgebildeten Computer ausführen lassen.
-
-
Dazu benötigen wir:
- Eingabe: 1 TN
- Bus: 1 TN
- CPU: 1 TN Steuerwerk oder wenn genügend Personen vorhanden sind:
-
- 1 TN Befehlszähler und
- 1 TN Befehlsregister , sowie
- 1 TN Rechenwerk
- 3 Register: je 1 TN
- RAM: 1 TN
- Ausgabe: 1 TN
Die TN, die nicht an der Animation teilnehmen können, bekommen Beobachterrollen zugeteilt.
- Beobachten aus Sicht der Eingabe
- Beobachten aus Sicht der Ausgabe: 1 TN prüft ob die Ausgabe stimmt
- Globale Beobachtung bzw. Beobachtung der einzelnen „Bauteile“
Jene TN, die Eingabe bzw. Ausgabe beobachten haben auch die Rolle der Benutzer. Das bedeutet, sie definieren die Werte der Daten, die vom Programm verarbeitet werden sollen.
Sollte eure Gruppe aus wenigen Teilnehmern bestehen, kann man problemlos die Betreuung der drei Register einer Person zuordnen. Ebenso kann man Eingabe und Ausgabe einer Person zuordnen. Es sollten aber jedenfalls unterschiedliche Personen für Ein-/Ausgabe, Bus, Steuerwerk, Rechenwerk, Register und RAM, also mindestens 6 Personen vorhanden sein.
Bei mehr Teilnehmern als benötigt, kann man auch noch das Steuerwerk trennen und unterschiedliche Personen mit den Aufgaben Befehlszähler und Befehlsregister beauftragen.
Die Aufgabenzuweisung erfolgt nun entsprechend den Aufgaben, die die jeweiligen Komponenten auch tatsächlich im Computer haben.
Start der Simulation
-
Programm in den Speicher ablegen
Da für den Computer Code auch nur eine spezielle Form von Daten ist, lesen wir erst einmal das Programm ein. Dies bedeutet:
o Eingabe gibt die Programmzeilen bzw. Programmkärtchen in der richtigen Reihenfolge an dem Bus.
o Der Bus legt sie mit S1 beginnend auf die jeweils nächste freie Speicherstelle, S1 also auf die Speicherstelle s1, S2 auf s2 u.s.w.
Um diesen Schritt wirklich auszuführen, fehlt uns die Zeit. Wir haben das Programm ja schon entwickelt und dieses nun wie es ist, in den Speicher eingelesen.
Ist dieser Vorgang abgeschlossen, können wir das Programm starten.
o Dazu wird der Befehlszähler-TN (Steuerwerk) einmal auf 0 gesetzt. Er bekommt ein leeres Blatt Papier. Dann muss ihm noch mitgeteilt werden, wo im Speicher der erste ausführbare Befehl liegt (dies mitzuteilen ist noch Aufgabe des Betriebssystems). In unserem Fall ist das Zelle 5. Er notiert also 5 auf seinem Zettel. Weiters müssen jene Beobachter, die Benutzer sind, drei Zettelchen mit den Werten für l, b und h (Vorsicht, genau in dieser Reihenfolge!) vor die Eingabe legen.
o Der Befehlsregister-TN (Steuerwerk-TN) liest (laut !) nun den Inhalt jener Zelle des Arbeitsspeichers, die auf dem Zettel des Befehlszählers notiert ist. (Anfangs also den Inhalt von s5). Er schreibt den Wert auf ein Kärtchen und legt dieses in das Befehlsregister.
Zur Beschleunigung des Verfahrens empfiehlt es sich, hierfür einen Stapel von Kärtchen zu haben, auf denen jeweils ein Befehl und Unterstreichungen für die zu diesem Befehl gehörenden Parameter eingetragen sind. Der BR-TN muss dann nur das richtige Kärtchen nehmen und die vom Speicher gelesenen Parameter (Adressen) eintragen.
o Der BR-TN prüft, ob die eben gelesene Operation eine Rechenoperation oder eine Speicheroperation ist. Ist im Befehlsregister (BR) eine arithmetische Operation, gibt sie der BR-TN an das Rechenwerk (ALU) weiter. Ist eine Speicheroperation im BR, wird das Kärtchen an den Bus-TN weitergegeben. o Bei Datentransfers (Operation LADE oder SPEICHERE) wird das Befehlszettelchen an den Bus-TN gegeben. Dieser schreibt den Wert, der in der angegebenen Abholadresse steht auf ein Kärtchen und legt dieses auf die angegebene Zieladresse (und sagt auch laut, was sie oder er eben ausführte).
Der ursprünglich in der Zieladresse gespeicherte Wert ist damit nicht mehr ersichtlich. Er wurde durch den neuen Wert überschrieben.
Ebenso wird bei LIES oder SCHREIB der Befehl an den Bus weitergegeben. Dieser sorgt in diesem Fall für den Datentransfer zwischen Eingabeeinheit und Speicher bzw. zwischen Speicher und Ausgabeeinheit.
o Wenn der Rechenwerk-TN einen Befehl bekommen hat, führt er diesen auf den ange-gebenen Registern aus. Dazu fragt es die im Befehl angesprochenen Register nach deren jeweils aktuellen Wert. Diese lesen ihn laut vor. as Rechenwerk notiert die Berechnung auf einem Kärtchen, führt sie aus, liest das berechnete Ergebnis laut vor und sagt, an welches Register dieses Ergebnis übergeben wird. Dieses Register legt das Ergebnis als neuen Wert auf seinen Kärtchenstapel. (Man sieht immer nur den jeweils aktuellen Wert).
Die Beobachter sollen dabei prüfen, ob das Rechenwerk auch tatsächlich korrekt rechnet.
o Nachdem ein Befehl ausgeführt wurde, ruft die ausführende Komponente (Bus, Rechenwerk) deutlich „fertig“. Auf dieses „fertig“ muss der Befehlszähler-TN warten. Jede Befehlsausführung, gleichviel ob vom Steuerwerk direkt ausgeführt oder vom Rechenwerk ausgeführt, führt zur Erhöhung des Befehlszählers. Der Befehlszähler-TN erhöht also die auf seinem Notizblatt (BZ) notierte Zahl um 1.
o Sobald diese Erhöhung erfolgte, also der Befehl fertig ausgeführt ist, liest der
Befehlsregister-TN (Steuerwerk-TN) den laut Befehlszähler nächsten Befehl vom Speicher, notiert ihn wieder auf einem Kärtchen, legt dieses ins Befehlsregister und entscheidet, ob der am Zettelchen stehende Befehl direkt auszuführen ist oder an das Rechenwerk weitergegeben werden soll.
2. Der Befehlszyklus – Erklärung der einzelnen Schritte:
-
- Befehl holen
a. Befehl wird aus dem Hauptspeicher (RAM) geholt, im Befehlszähler steht drinnen, welcher Befehl der nächste ist.
b. Befehl wird ins Befehlsregister geschrieben.
- Befehlszähler erhöhen
a. Befehlszähler wird um die Befehlslänge erhöht (in unserem Fall war dies stets 1)
- Befehl decodieren
a. Berechnen, wo die Operanden im RAM (Hauptspeicher) stehen
b. Steuersignale für den Befehl/Operator werden berechnet
- Operanden holen
a. Die Operanden werden aus dem RAM (Hauptspeicher) geholt und in den Registern gespeichert.
- Befehl ausführen
a. ALU (Rechenwerk) berechnet nun das Ergebnis.
b. Ergebnis wird wieder ins Register geschrieben.
- Ergebnis speichern
a. Ergebnis wird im RAM (Hauptspeicher) abgelegt und steht dort für die Anforderung der Ausgabe bereit.
Somit haben wir das soeben Durchgespielte gefestigt.
In dieser Phase sollten die Beobachter vorwiegend tätig sein und beschreiben, wie der „Rechner“ gearbeitet hat.
Wenn das nicht möglich ist, sollen die Teilnehmer, die die einzelnen Komponenten gespielt haben, helfen und berichten, was ihre Aufgabe war.
_
Flussdiagramm Rollenspiel
Vereinfachtes Flussdiagramm zur Simulation des von Neumann-Rechners

-
Start der Simulation
- Eingabe: Liefert die Programmzeilen an den Bus.
-
Programm in den Speicher ablegen
- Bus: Überträgt die Programmzeilen in den RAM.
-
Initialisierung
- Befehlszähler (BZ): Wird auf 0 gesetzt, Beginn bei Speicherzelle 5.
- Benutzer (Beobachter): Legen Zettelchen mit Werten für
l, b, h vor die Eingabeeinheit.
-
Befehl holen
- Befehlszähler (BZ): Zeigt auf die Speicherzelle mit dem nächsten Befehl.
- Befehlsregister (BR): Liest den Befehl aus dem RAM und speichert ihn.
-
Befehl decodieren
- Befehlsregister (BR): Prüft den Befehl.
- Rechenoperation: Weitergabe an das Rechenwerk (ALU).
- Speicheroperation: Weitergabe an den Bus.
-
Operanden holen (bei Speicheroperation)
- Bus: Holt die Operanden aus dem RAM und liefert sie an die Zieladresse (z.B. Register).
-
Befehl ausführen (bei Rechenoperation)
- Rechenwerk (ALU): Führt die Berechnung durch.
- Register: Speichert das Ergebnis.
-
Ergebnis speichern (bei Rechenoperation)
- Register: Ergebnis wird im RAM abgelegt.
- RAM: Speicherplatz wird für die Ausgabe vorbereitet.
-
Befehlszähler erhöhen
- Befehlszähler (BZ): Erhöht sich um 1 nach jeder Befehlsausführung.
-
Wiederholung
- Befehlsregister (BR): Liest den nächsten Befehl und entscheidet über die Weitergabe.
- Befehlszähler (BZ): Zeigt auf den nächsten Befehl.
- Ende
- Programm abgeschlossen, Simulation beendet.
Beobachterrollen:
- Eingabe- und Ausgabebeobachter: Prüfen, ob Eingabe und Ausgabe korrekt sind.
- Globale Beobachter: Überwachen den gesamten Ablauf und die Korrektheit der Schritte.
Erweitertes Programm
Code für die Berechnung der Fläche eines Dreiecks, ausgehend von der
In diesem Fall haben wir nur 3 Variable, F, g, h. In der Beispielslösung wird Speicherplatz in dieser
Reihenfolge angelegt. Tatsächlich wäre jede beliebige Reihenfolge korrekt.
S1 Platz für F
S2 Platz für g
S3 Platz für h
Es folgen die Leseoperationen für g und h.
S4 LIES s2 lies g von Eingabeeinheit
S5 LIES s3 lies h von Eingabeeinheit
nun können wir die beiden Operanden in die Register laden. Die Registerzuordnung ist wieder beliebig.
S6 LADE s2, r1 lade Wert von g in Register 1
S7 LADE s3, r2 lade Wert von h in Register 2
S8 MULT* r3, 1/2 Hier haben wir wieder eine Operation mit einer Konstanten.
Eigentlich sollte durch 2 dividiert werden. Doch dies entspricht der viel einfacher durchzuführenden Multiplikation mit ½ (oder 2-1). Die tatsächliche Realisierung wird durch ein Verschieben des Registerinhalts nach Rechts, also Right-Shift r3 ausgeführt.
Wir haben somit das gewünschte Ergebnis in Register 3 stehen. Dieses ist somit in den Speicher zu schreiben und von dort auszugeben.
S9 SPEICHERE r3, s1 speichert das nunmehr in Register 3 enthaltene Endergebnis in Zelle s1
S10 SCHREIB s1 gibt den in s1 enthaltenen Wert auf der Ausgabe aus.
S11 STOP beendet dieses Programm