Registermaschinen: Unterschied zwischen den Versionen

Aus Einführung in die Theoretische Informatik und in die Mathematische Logik
Wechseln zu: Navigation, Suche
Zeile 3: Zeile 3:
 
Statt einem Speicherband hat man mehrere '''Register''', das sind Zahlenvariablen, die natürliche Zahlen beinhalten können, und es gibt Befehle zum Inkrementieren, Dekrementieren, auf null prüfen, und Sprunganweisungen.
 
Statt einem Speicherband hat man mehrere '''Register''', das sind Zahlenvariablen, die natürliche Zahlen beinhalten können, und es gibt Befehle zum Inkrementieren, Dekrementieren, auf null prüfen, und Sprunganweisungen.
  
Wir nennen diese Register $R_0, R_1, \ldots$. Üblicherweise nutzen wir ein Register als Eingabe und ein Register als Ausgabe, der Übersichtlichkeit nennen wir sie $R_{\mbox{in}}$ und $R_{\mbox{out}}$.
+
Wir nennen diese Register $R_0, R_1, \ldots$. Üblicherweise nutzen wir ein Register als Eingabe und ein Register als Ausgabe, der Übersichtlichkeit nennen wir sie $R_{\mbox{in}}$ und $R_{\mbox{out}}$ (wie genau man die Register bezeichnet ist ja auch nicht so wichtig).
 +
 
 +
Es haben sich zwei verschiedene Darstellungen für Registermaschinen eingebürgert, die eine als Graph mit Übergangskanten, die andere als Programmcode – ähnlich zu Programmiersprachen – mit Sprunganweisungen. Wir schauen uns erst die Darstellung mit Sprunganweisungen an.
 +
 
 +
Es gibt für jedes Register <code>R[i]</code> die Programmbefehle <code>R[i]++</code> und <code>R[i]--</code>. <code>R[i]++</code> erhöht das Register 1, <code>R[i]--</code> senkt es um $1$ ab falls es $>0$ ist, und lässt es gleich, falls es $0$ ist. Weiterhin gibt es Anweisungen <code>if R[i]==0 then goto A else goto B</code>, wobei <code>A</code> und <code>B</code> Sprungmarken sind. Die Anweisung springt zur betreffenden Sprungmarke, je nach dem, ob das angegebene Register $0$ ist, oder nicht.
  
 
[[Kategorie:TODO]]
 
[[Kategorie:TODO]]

Version vom 14. August 2018, 13:58 Uhr

Ein Maschinenmodell das näher an dem ist, was moderne Computer tun, sind Registermaschinen.

Statt einem Speicherband hat man mehrere Register, das sind Zahlenvariablen, die natürliche Zahlen beinhalten können, und es gibt Befehle zum Inkrementieren, Dekrementieren, auf null prüfen, und Sprunganweisungen.

Wir nennen diese Register $R_0, R_1, \ldots$. Üblicherweise nutzen wir ein Register als Eingabe und ein Register als Ausgabe, der Übersichtlichkeit nennen wir sie $R_{\mbox{in}}$ und $R_{\mbox{out}}$ (wie genau man die Register bezeichnet ist ja auch nicht so wichtig).

Es haben sich zwei verschiedene Darstellungen für Registermaschinen eingebürgert, die eine als Graph mit Übergangskanten, die andere als Programmcode – ähnlich zu Programmiersprachen – mit Sprunganweisungen. Wir schauen uns erst die Darstellung mit Sprunganweisungen an.

Es gibt für jedes Register R[i] die Programmbefehle R[i]++ und R[i]--. R[i]++ erhöht das Register 1, R[i]-- senkt es um $1$ ab falls es $>0$ ist, und lässt es gleich, falls es $0$ ist. Weiterhin gibt es Anweisungen if R[i]==0 then goto A else goto B, wobei A und B Sprungmarken sind. Die Anweisung springt zur betreffenden Sprungmarke, je nach dem, ob das angegebene Register $0$ ist, oder nicht.