====== 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