Anleitung und Übung
| Website: | Moodle Weimar - Jenaplan |
| Kurs: | Test |
| Buch: | Anleitung und Übung |
| Gedruckt von: | Gast |
| Datum: | Freitag, 24. Juli 2026, 06:32 |
1. Ein erster Blick auf den Simulator
Man sieht einem modernen Rechner seine Funktion nicht an. Um besser zu verstehen, wie Rechner funktionieren, greifen wir deshalb auf eine Simulation zurück. Der Simulator „Johnny“ ist nach dem genialen Entwickler der heutigen Rechnerstruktur, John von Neumann
(1903-1957) benannt: Privat war von Neumann für seine Partys berühmt und sein Spitzname war wohl auch deshalb „Good Time Johnny“, worauf der Name des Simulators anspielt.
Der Johnny-Simulator konzentriert sich auf CPU mit Rechenwerk und Steuerwerk und den Arbeitsspeicher. Die Benutzungsoberfläche entspricht dabei etwa dem folgendem Bild:

Beim Start ist die Struktur des Steuerwerks (Control Unit) noch verdeckt, um die Dinge zunächst einfach zu halten. Der Inhalt des RAM kann im Simulator gelöscht, aus einer Datei geladen bzw. in eine Datei geschrieben werden.
Vieles ist beim Johnny-Simulator einfacher als bei einem richtigen Rechner.
- Obwohl praktisch alle "echten" Rechner im Binärsystem rechnen, tut dies der Simulator in unserem gewohnten Dezimalsystem.
- Auch die Funktion des Bus-Systems ist gegenüber echten Rechnern vereinfacht: Normalerweise können sich Bus-Systeme keine Daten merken, sondern sind lediglich Verbindungswege.
- Der Inhalt des RAM kann im Simulator gelöscht, aus einer Datei geladen bzw. in eine Datei geschrieben werden.
All diese Vereinfachungen sollen den Benutzern des Simulators die Bedienung vereinfachen, die Grundprinzipien des Rechners bleiben jedoch erhalten.
Der Simulator kann über diesen Link aufgerufen werden.
2. Arbeitsspeicher und Prozessor von JOHNNY
Betrachten wir zunächst den Arbeitsspeicher auf der linken Seite des Bildschirms. Dieser ist hier tatsächlich als eine Tabelle dargestellt, was seiner tatsächlichen Struktur recht nahe kommt. In der Spalte „Address" stehen die (unveränderlichen) Adressen. In der Spalte Data können zwei Zahlen getrennt durch den Punkt abgelegt werden.
Die erste Zahl (solange nicht Null) steht für den Befehl (TAKE, ADD, SUB, ...) der ausgeführt werden soll. Die zweite Zahl verweißt auf die Zeile, in der die zu verwendenden Daten stehen.
Ist die erste Zahl Null ist, steht die zweite Zahl als Speicher für beliebige Daten zur Verfügung.
Die hinteren beiden Spalten „Asm“ und „Opnd“ sind nur Kommentare zum besseren Verständnis. In „Asm“ wird der Befehle der ersten Zahl gezeigt.
Der eigentliche RAM-Inhalt ist nur die „Data“ Spalte.

In einem echten Rechner kann man auf die Inhalte der Speicherstelle nur über das Bus-System zugreifen, sie also lesen oder verändern.
Beim Simulator kann man direkt in den Speicher hineinschauen.
Durch Klicken auf die entsprechende Speicherstelle kann man auch deren Inhalt über den grauen Pfeil links verändern.
3. Das Rechenwerk (ARITHMETIC LOGIC UNIT)

Betrachten wir nun das Rechenwerk (Arithmetic Logic Unit). Diese kann mit Daten, die auf dem Datenbus liegen, rechnen. Kernstück des Rechenwerks ist der so genannte Akkumulator (lat.: „Sammler“). In ihm sammeln sich die Rechenergebnisse an. Drückt man z.B. auf die Taste plus, so wird der Wert auf dem Datenbus zum Wert des Akkumulators addiert und das Ergebnis wieder im Akkumulator gespeichert. Johnny beherrscht von sich aus nur die beiden Rechenoperationen plus und minus, alles andere muss man ihm sozusagen beibringen (mehr dazu später). Der Wert des Akkumulators kann auch wieder auf den Datenbus kopiert werden (mit acc->db). Daneben gibt es noch ein paar andere Möglichkeiten, den Akkumulator zu manipulieren, die Du aber auch leicht selbst herausfinden kannst. Wichtig für später ist auch die Kontrolllampe links neben dem Akkumulator. Diese zeigt an, ob der Inhalt des Akkumulators gerade den Wert 0 hat.
4. Erste Maschinenprogramme
Aufgabe

Teste das Programm, in dem du unter den verschiedenen Adressen 10,11,12 und 14 verschiedene Zahlen vor dem Programmlauf speicherst.
b) Weitere Befehle
Neben den Befehlen TAKE, ADD, SUB und SAVE gibt es noch einige andere. Finde sie anhand des folgenden Programms heraus, was die darin enthaltenen Befehle bewirken und kreuze die richtige Beschreibung der Funktion an.

5. Sprünge und Bedingungen
Bisher sind unsere Programme immer von einem Befehl zum nächsten gegangen. Für kompliziertere Aufgaben reicht das jedoch nicht. Wie du wahrscheinlich aus anderen Programmiersprachen weißt, muss es auch Verzweigungen (if ... then ... else ...) oder Schleifen (etwa while ... do ...) geben können.
Aufgabe
a) Kreuz und quer durch's Programm
Teste das folgende Programm und finde heraus, was die Befehle JMP und TST bewirken. Setze vor Ausführung des Programms die Speicherstelle Nr. 10 auf den Wert 5 und die Speicherstelle Nr. 11 auf den Wert 42.

Beschreiben Sie die Funktion der beiden Befehle JMP und TST in kurzer Form:
b) Malnehmen - eigentlich gar nicht eingebaut
Nun wird es komplizierter: Konstruiere ein Maschinenprogramm, das die Zahlen in den Speicherstellen 10 und 11 miteinander multipliziert und das Ergebnis in der Speicherstelle 12 abspeichert.
Tipp: Das Programm soll folgendes tun:
- Die Speicherstelle 12 zunächst auf 0 setzen.
- Den Wert der Speicherstelle 12 in den Akku holen, den Wert der Speicherstelle 10 addieren das Ergebnis und wieder in Speicherzelle 12 abspeichern.
- Nach einer solchen Addition den Wert der Speicherstelle 11 um 1 erniedrigen.
- Das Verfahren ab dem 2. Punkt so lange wiederholen Sie, bis die Speicherstelle 11 den Wert 0 hat.
Teste dein Programm, ob es auch funktioniert. Hierfür sollten die Speicherstellen 10 und 11 auf kleine, von Null verschiedene Werte gesetzt werden, also z.B. 5 und 3.
c) Dividieren - einfache Version Schreiben Sie ein Programm, das eine Zahl durch eine andere Zahl teilt. Betrachten Sie dabei zunächst nur den Fall, dass die größere Zahl in Speicherzelle 10 tatsächlich durch die kleinere in Speicherzelle 11 ganzzahlig teilbar ist.
d) Größer, kleiner oder gleich Wir betrachten zwei Zahlen in den Speicherstellen 10 und 11. JOHNNY soll entscheiden, ob die Zahl in Speicherstelle 10 größer ist als die in Speicherstelle 11, gleich groß ist, oder aber kleiner. Je nachdem soll in Speicherstelle 12 nach der Untersuchung der Wert 1, 2 oder 3 stehen.
Tipp:
e) Dividieren - komplizierte Version Schreiben Sie ein Programm, das eine Zahl durch eine andere Zahl teilt. Und zwar in der Art, wie wir vermutlich alle das in der Grundschule gelernt haben:
17:5 = 3 Rest 2.
Die Zahl in Speicherstelle 10 soll dividiert werden durch die Zahl in Speicherstelle 11. Der ganzzahlige Quotient soll danach in Speicherstelle 12, der Rest in Speicherstelle 13 gespeichert sein. Tipp: Vielleicht hilft Ihnen das Ergebnis aus Aufgabe d)