david-peter.de
 

Registermaschine

Eine Registermaschine ist ein abstraktes Algorithmenmodell mit einem minimiertem Satz an Befehlen. Sie arbeiten ähnlich wie Prozessoren mit Maschinencode-Steuerung. Die Registermaschine führt eine durchnummerierte Reihe von Befehlen aus und kann nur mittels (bedingten) Sprüngen kontrolliert werden. Sie besteht aus den Registern

B, C0, C1, C2, ..., Cn

und dem Programm (den einzelnen Befehlen). Das Register B ist der Befehlszähler, und enthält immer die Nummer des aktuellen Befehls, C0 ist das Arbeitsregister (Akkumulator) und die restlichen Register sind Speicherplätze. Sie können - ebenso wie die anderen beiden - natürliche Zahlen abspeichern.

Beispielprogramm

Das folgende Programm berechnet den Term 2 + 3. Zunächst wird per CLOAD 2 die übergebene Zahl 2 in den Akkumulator geladen. STORE 1 speichert den aktuellen Wert (2) im Register 1 (C1) ab. Nun wird wieder per CLOAD der Akkumulator mit 3 geladen und per ADD 1 das Register C1 dazuaddiert. Nun enthält der Akkumulator das Ergebnis der Berechnung, also 5.

CLOAD 2
STORE 1
CLOAD 3
ADD 1
END


Interpreter

Um diese Programme auszuprobieren habe ich einen Interpreter geschrieben, der von der Standardeingabe (oder einer Datei) das Programm einliest, parst und anschließend interpretiert (ausführt). Der Download enthält unter anderem auch ein Programm, welches die Fakultät einer Zahl berechnnet.

Download regm.tar.gz (2.58 Kb)

Wenn man das Beispielprogramm von oben eingibt erhält man folgende Ausgabe:

+-----+--------+-----+  +---------+---------+---------+
|  B  | Befehl |  I  |  |  B'     | C_0'    | C_1'    |
+-----+--------+-----+  +---------+---------+---------+
|   1 | CLOAD  |   2 |  |       2 |       2 |       0 |
|   2 | STORE  |   1 |  |       3 |       2 |       2 |
|   3 | CLOAD  |   3 |  |       4 |       3 |       2 |
|   4 | ADD    |   1 |  |       5 |       5 |       2 |
+-----+--------+-----+  +---------+---------+---------+


Copyright © 2002, 2003 by David Peter <davidpeter at web dot de>