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


3.2.2 Laden und Speichern (Forts.)



Hier sollte die Ausgabe des Java-Applets "Von-Neumann-Rechner - Laden und Speichern" erscheinen. Wenn Sie statt dessen diesen Text sehen, unterstützt ihr Browser kein Java!



Ersetzen von aufwendigen Befehlen durch einfache mittels selbstmodifizierendem Kode

Es ist ihnen sicherlich schon aufgefallen: Anders als oben behauptet, besitzt unser VNR vier Register. Das bisher verschwiegene "Hilfsregister", welches von LDA mem indir. und STA mem indir. benutzt wird, ist aber nicht von so fundamentaler Wichtigkeit wie die anderen drei, denn die beiden genannten Befehle lassen sich problemlos durch andere emulieren (der Kürze wegen wollen wir von nun an "LDA 10" statt "LDA mem 10" und "LDA (10)" statt "LDA mem indir. 10" schreiben; entsprechend steht "STA 11" für "STA mem 11"):

Nehmen wir, sicherlich ohne Beschränkung der Allgemeinheit, den Befehl LDA (10). An Adresse 10 befinde sich der Wert 20, an Adresse 20 wiederum der Wert 30. Am Ende der Ausführung von LDA (10) muß also 30 im Akkumulator stehen. Das Problem ist, daß sich während der Ausführung des Programmes der Wert an Adresse 10 ändern wird - dieser Wert ist ein sogenannter Zeiger, bliebe er konstant, wäre das LDA (10) unnötig und könnte durch LDA 20 ersetzt werden. Wir müssen es schaffen, jedesmal dann, wenn LDA (10) ausgeführt werden soll statt dessen ein LDA x auszuführen, wobei x der Wert von Adresse 10 ist.
Dabei kommt uns zustatten, daß der VNR einen gemeinsamen Speicher für Daten und Befehle besitzt; wir können eine Zahl in den Speicher schreiben und den VNR diese als Befehl ausführen lassen. Man spricht dann von selbstmodifizierendem Kode. Das Befehlswort für LDA x besteht aus einem höherwertigen Byte für den Befehlskode (11 hexadezimal für LDA mem) und einem niederwertigen Byte mit der benötigten Adresse. Ein LDA 17 läßt sich also erzeugen als 1100 + 17 (hexadezimal).

Wir ersetzen nun LDA (10) durch

Adresse Befehl/Wert Erläuterung
n LDA 10 Worauf zeigt der Zeiger? Auf Adresse 20.
n+1 ADD F0 An Adresse F0 steht der Befehlskode für LDA mem.
n+2 STA n+3 An Adresse n+3 das Befehlswort "LDA 20" erzeugen. Der Wert n+3 ist uns beim Erstellen des Programmes bekannt, es ist also keine weitere Addition notwendig!
n+3 LDA 20 Diesen Befehl haben wir gerade selbst erstellt!
10 20 Nur zur Erinnerung.
20 30 Nur zur Erinnerung.
F0 1100 Befehlskode für LDA mem.


Analog kann man, ohne die Universalität des VNR einzuschränken, STA mem indir. ersetzen.


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