Zum Inhalt springen

Registermaschine

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 19. Juli 2004 um 13:48 Uhr durch Zap~dewiki (Diskussion | Beiträge) (linkfix). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Die Registermaschine ist ein Rechnermodell, das einem realen Rechner (PC) sehr ähnlich ist. Ein realer Rechner kann alles, was auch eine Registermaschine kann. Da man auch beweisen kann, daß sich die Registermaschine und die Turingmaschine gegenseitig mit polynomieller Laufzeit simulieren können, gelten Aussagen, die man für die Turingmaschine beweisen kann, auch für die Registermaschine und damit auch für reale Rechner. Dies ist in der Theoretischen Informatik von Vorteil, da man viele Aussagen an Hand der Turingmaschine leichter beweisen kann.

Eine Registermaschine arbeitet mit natürlichen Zahlen. Alle ab jetzt vorkommenden Zahlen sollten in diesem Kontext betrachtet werden.

Eine Registermaschine besteht aus

  • ein Befehlszeiger b
  • einem Input-Wert m
  • einem Output-Wert n
  • und einem unendlich großen Speicher aus durchnummerierten Speicherzellen (Register) r(1), r(2), r(3), ...


Ein Registermaschinenprogramm besteht aus

  • einer Menge von Befehlen mit jeweils eindeutiger Nummer
  • und einer Startmarke


Ein Befehl kann folgendermaßen aussehen (i > 0):

Befehl Wirkung
then p r(i):=r(i)+1 b:=p
then p Wenn r(i) > 0 dann r(i):=r(i)-1 b:=p
if then p else q Wenn r(i)=0 dann b:=p ansonsten b:=q


Zum Starten des Programmes sollte zusätzlich ein Eingebedatensatz bestehend aus m geordneten Werten vorhanden sein.

Zu Beginn wird der Befehlszeiger b auf den Wert der Startmarke des Programmes gesetzt. Die Speicherzellen von Nummer 1 bis m werden auf die entsprechenden Werte des Eingabedatensatzes gesetzt. Die restlichen Speicherzellen erhalten den Wert 0.

Die Registermaschine führt dann nacheinander die Befehle des Programms aus. Es wird immer der Befehl mit der Nummer b ausgeführt. Die Ausführung eines nichtexistenten Befehls terminiert das Programm.

Nach der Terminierung werden alle Werte von r(1) bis r(n) ausgegeben.