[vorheriger Abschnitt][nächster Abschnitt][Inhalt]


3.2.2 Laden und Speichern

Der einzige Befehl, den unser erstes Programm ausführte, war offenbar ein Ladebefehl. Es ist davon auszugehen, daß er nicht der einzige ist; tatsächlich beherrscht selbst unser einfacher VNR bereits mehrere verschiedene Ladebefehle.
Deren Notwendigkeit ist leicht einzusehen: LDA absol. eignet sich gut, um den Akkumulator mit einem Wert zu initialisieren, aber er überträgt nur mittelbar einen Wert aus dem RAM (als Anteil des Befehlswortes nämlich). Mindestens ein Befehl, um im RAM stehende Wörter (z.B. Variablen) direkt in den Akkumulator zu übertragen, ist noch nötig.

Nach 2.2 Verfahren bei dem Rechnerbetrieb wissen wir, daß mit den Lade- semantisch die Speicherbefehle verbunden sind. Diese werden hier gleich mitvorgestellt.

Das Applet auf der folgenden Seite führt mit einem Beispielprogramm alle Lade-/Speicherbefehle des VNR vor. Ganz unten auf dieser Seite steht im Detail erklärt, was das Beispielprogramm tut. Wer sich überraschen lassen will, sollte nur noch die folgenden zwei Hinweise lesen und kann dann umblättern.

  1. Weil die Decode-Phase immer dasselbe macht, unabhängig vom Befehl, der bei Eintritt in diese Phase ja auch noch gar nicht erkannt ist, gibt es jetzt die Möglichkeit, diese "langweilige" Phase zu überspringen. Dazu deaktivieren Sie im Steuerfenster das Feld "DECODE-Phase anzeigen" (unter MS-Windows darf kein Kreuzchen mehr zu sehen sein)

  2. Bei unserem ersten Programm war der gesamte Hauptspeicher mit LDA absol.-Befehlen gefüllt; da der PC nach der größtmöglichen Adresse wieder auf 0 springt, hätten Sie unendlich lange simulieren können. Das neue Programm zeigt aber eine der fundamentalen Eigenheiten des VNR, die wir einleitend kennengelernt haben: Der Hauptspeicher ist für die Lagerung von Programmcode und Daten zuständig. Mit anderen Worten: Es gibt bei jedem nicht-trivialen Programm Binärwörter im Speicher, auf die der VNR sehr merkwürdig reagiert, wenn er sie ausführen soll (weil es sich z.B. um den ASCII-Kode dieses Textes handelt). Genau das ist hier der Fall: Der VNR beginnt seine Arbeit nach einem Reset immer an Adresse 0 (der Resetwert des Registers "Programmzähler" ist also 0000), deswegen liegt hier unser Code (mit Lade- und Speicherbefehlen). Weiter "hinten" im Speicher aber folgen die Daten, die von den Lade-/Speicherbefehlen bewegt werden sollen. Wenn Sie den VNR solange arbeiten lassen, bis er sich ungewöhnlich benimmt, können Sie ihn mit dem Knopf "Simulation neu starten" zurücksetzen (bei allen Registern, dem RAM und der ALU wird ein Reset durchgeführt) und bei Adresse 0 loslaufen lassen.

Achtung, es folgt die detaillierte Beschreibung des Programmes für den VNR auf der nächsten Seite:















Das Programm lädt zunächst den Akku nacheinander mit den Werten 4, 6 und 9. Dabei kommt die "1" wie gehabt aus dem Befehlswort eines LDA absol., die 6 und 9 aber werden von den beiden anderen load-Varianten (LDA mem und LDA mem indir.), die dieser VNR kennt, aus dem RAM geholt (von den Adressen 18 und 19 hexadezimal in der vierten Zeile des RAMs). Der dritte Ladebefehl benötigt dazu sogar noch einen "Zwischenwert" von der Adresse 10 hexadezimal. Die 9, die sich nach dem dritten load im Akku befindet, soll nun an 1a und 1b gespeichert werden, wozu die beiden store-Varianten dienen. STA absol. enthält direkt im Befehlswort die benötigte Adressangabe 1a, STA mem muß diese erst aus dem RAM holen (von Adresse 11).

Es folgen drei NOP-Befehle um die erste Zeile des Speichers zu füllen und als Trennung zum zweiten Teil des Programmes. Wie der Name (No OPeration) schon sagt, bewirkt ein NOP gar nichts, schadet aber auf jeden Fall auch nicht, anders als wenn der Standardwert der drei RAM-Zellen nicht überschrieben worden wäre.

Im zweiten Teil des Programmes folgen in gleicher Reihenfolge wieder alle fünf Befehle, dieses Mal aber alle mit dem gleichen Argument (27 hexadezimal). Man beachte das trotzdem völlig unterschiedliche Verhalten!

Es folgen wieder drei NOP-Befehle, als Warnung, rechtzeitig mit der Simulation aufzuhören, bevor der VNR Daten als Befehle interpretiert.


[vorheriger Abschnitt][nächster Abschnitt][Inhalt] Carsten Kelling 1996 ([EMail senden]); letzte Änderung: 21. Februar 1997