====== Theoretische Registermaschine ======
Eine **Registermaschine** ist ein abstraktes Modell der theoretischen Informatik, das genutzt wird, um den Begriff der Berechenbarkeit zu definieren. \\ \\
Eine **Registermaschine** besteht aus
* einem Programm bestehend aus **endlich vielen durchnummerierten Befehlen**,
* unendlich vielen **durchnummerierten Speicherzellen**, den **Registern** und
* einem **Befehlszähler**, in dem die Nummer des nächsten auszuführenden Befehls gespeichert ist.
Jedes Register kann eine **beliebig große natürliche Zahl** speichern. \\ \\
Die Registermaschine besitzt folgenden Befehlssatz:
^Befehl ^Bedeutung^
|Increase Register i and jump to p | Erhöht den Wert des Registers i um 1 und lädt dann die Adresse p in den Befehlszähler |
|Decrease Register i and jump to p | Vermindert den Wert des Registers i um 1 (nur falls Wert von i > 0) und lädt dann die Adresse p in den Befehlszähler |
|if Value of i == 0 then jump to p else jump to q | Falls der Wert des Registers i den Wert 0 hat, lade p in den Befehlszähler, ansonsten lade q in den Befehlszähler|
====== Reale Registermaschine ======
Reale Computer sind auch Registermaschinen, aber in etwas anderer technischer Form. Sie bestehen
* aus einem einzigen Register, dem **Akkumulator**,
* dem **Befehlszähler**, der die Adresse des nächsten Befehls enthält,
* dem **Befehlsregister**, das den aktuellen Befehl enthält,
* dem **Statusregister**, dessen Bits entsprechend dem Ergebnis des letzten Rechenergebnisses gesetzt sind.
Der Akkumulator kann auf vielseitige Weise benutzt werden. Es existieren Befehle, um
* Daten vom Arbeitsspeicher in den Akkumulator zu laden ("lesen"),
* Daten vom Akkumulator in den Arbeitsspeicher zu schreiben,
* Rechenoperationen mit dem Akkumulator auszuführen und
* Logikoperationen mit dem Akkumulator auszuführen.
====== Befehlszyklus ======
Die Maschinensprachebefehle werden innerhalb des Prozessors in folgenden Teilschritten (Phasen) abgearbeitet (**"Befehlszyklus"**):
* **Fetch-Phase**:
* Der Maschinensprache-Befehl wird aus der Speicherzelle gelesen, auf die der Befehlszähler zeigt.
* Der Befehlszähler wird entsprechend erhöht.
* Der Operand (z.B. ein immediate-Operand oder eine Adresse) wird geladen.
* Der Befehlszähler wird erneut entsprechend erhöht.
* **Decode-Phase**:
* Der Befehl wird entschlüsselt.
* Steuerwerk und Rechenwerk werden für die Ausführung des Befehls vorbereitet.
* **Execute-Phase**:
* Ausführen des Befehls durch Rechenwerk und Steuerwerk