Q3.5 · Registermaschine
Berechnung mit Registern, Akkumulator und elementaren BefehlenQ3.4 hat Berechnung als regelgeleitete Verarbeitung auf einem Band beschrieben: Ein Kopf liest, schreibt, bewegt sich und erzeugt so Schritt für Schritt ein Ergebnis. Q3.5 betrachtet dieselbe Berechenbarkeitsfrage in einem maschinennäheren Modell.
Eine Registermaschine arbeitet mit Programmzeilen, Registern, einem Akkumulator, einem Programmzähler und Sprüngen. Damit lässt sich präzise beschreiben, wie elementare Befehle eine Funktion über den natürlichen Zahlen Schritt für Schritt berechnen.
In diesem Kapitel lernst du Aufbau und Arbeitsweise der Registermaschine kennen, unterscheidest Operandenarten, interpretierst Befehle mit ihrer Syntax und Semantik und untersuchst, wann eine Funktion partiell oder total registermaschinen-berechenbar ist. Außerdem wird WHILE-Berechenbarkeit als weiteres Berechenbarkeitsmodell eingeordnet.
Orientierung: Wozu ein weiteres Berechnungsmodell?
Anschluss an Q3.4 und Einordnung der Registermaschine
Anschluss an Q3.4 und Einordnung der Registermaschine
Ein weiteres Modell ist nicht nötig, weil die Turingmaschine zu schwach wäre. Es ist sinnvoll, weil unterschiedliche Modelle unterschiedliche Seiten von Berechnung sichtbar machen.
Die Turingmaschine lenkt den Blick auf Band, Kopf, Lesen, Schreiben und Bewegen. Die Registermaschine lenkt den Blick auf Programmtext, Zahlregister, Akkumulator, Programmzähler und Sprunglogik. Beide Modelle fragen nach algorithmischer Berechnung, aber sie machen verschiedene Strukturen beobachtbar.
Berechenbarkeit aus Q3.4
- Turing-Berechenbarkeit als partielle Funktionen auf Symbolfolgen aufnehmen
- Funktionen über den natürlichen Zahlen
- Berechnung und Entscheidung unterscheiden
- Halteproblem und Entscheidbarkeitsgrenzen übertragen
- Laufzeit und asymptotische Laufzeit als Effizienzsicht ergänzen
Registermaschine
- unendlich viele Register mit natürlichen Zahlen
- Eingabe in den ersten Registern
- Akkumulator als Rechenregister
- Programm als Folge elementarer Befehle
- Sprungmarken für Ablaufsteuerung
Q3.1 beginnt mit formalen Sprachen und Grammatiken, Q3.2 und Q3.3 fragen nach Erkennen mit Automaten und Speicher. Q3.4 erweitert diese Sicht zur allgemeinen Berechnung. Q3.5 schließt daran an: Die Registermaschine steigert nicht die Macht der Turingmaschine, sondern zeigt denselben Berechenbarkeitsbegriff in einem anderen Speicher- und Befehlsmodell.
Aufbau einer Registermaschine
Bestandteile, Startkonfiguration und Ergebnis
Bestandteile, Startkonfiguration und Ergebnis
Eine Registermaschine besteht aus Registern R1, R2, R3, ..., die natürliche Zahlen enthalten, einem Akkumulator als zentralem Rechenregister, einem Programm aus nummerierten oder markierten Befehlszeilen und einer aktuellen Programmposition (Befehlszähler).
- Eingaben stehen zu Beginn in den ersten
kRegistern. - Nicht genutzte Register enthalten anfangs
0. - Die Maschine startet in einer Startkonfiguration und endet in einer Endkonfiguration.
- Das Ergebnis steht je nach Konvention in einem festgelegten Register (oft
R1) oder im Akkumulator.
Der Anschluss an Q3.4 liegt in der Idee der Konfiguration. Bei der Turingmaschine bestand eine Konfiguration aus aktuellem Zustand, Bandinhalt und Kopfposition. Bei der Registermaschine verschiebt sich diese Sicht: Entscheidend sind Programmzähler, Akkumulator und Registerbelegung.
Damit wird nicht ein Bandzustand verfolgt, sondern die Wirkung eines Programms auf Zahlenspeicher. Der Programmtext bleibt unverändert; die Ausführung entsteht dadurch, dass Befehle den Akkumulator, Registerwerte und die nächste Befehlsposition verändern.
Das Modell hat theoretisch unendlich viele Register, ein konkretes Programm nutzt aber immer nur endlich viele davon.
Operandenarten
Konstante, direkte und indirekte Adressierung
Konstante, direkte und indirekte Adressierung
Operandenarten klären, worauf ein Befehl eigentlich zugreift: auf eine Zahl selbst, auf ein fest benanntes Register oder auf ein Register, dessen Adresse erst aus einem anderen Register gelesen wird.
Übersicht
| Form | Bedeutung | Beispiel |
|---|---|---|
#i |
Konstante Zahl i |
LOAD #7 |
i |
direkte Adressierung: Inhalt von Register Ri |
ADD 4 |
*i |
indirekte Adressierung: Inhalt des Registers, dessen Nummer in Ri steht |
STORE *3 |
Indirekte Adressierung ist besonders wichtig: Wenn in Register R3 der Wert 8 steht, bedeutet *3, dass Register R8 verwendet wird.
#7bedeutet: nutze den Wert7selbst.4bedeutet: nutze den Inhalt vonR4.*3bedeutet: lies erstR3; dessen Wert ist die Nummer des verwendeten Registers.- Direkte Adressierung liest oder beschreibt immer ein fest benanntes Register.
- Indirekte Adressierung nutzt den Registerinhalt als Adresse auf ein weiteres Register.
- Das macht Speicherzugriffe flexibler, aber auch fehleranfälliger.
Befehlssatz: Syntax und Semantik
Form der Befehle und ihre Wirkung auf den Zustand
Form der Befehle und ihre Wirkung auf den Zustand
Syntax beschreibt, wie ein Befehl geschrieben wird. Semantik beschreibt, welche Zustandsänderung er auslöst: im Akkumulator, in Registern und beim Programmzähler.
x steht je nach Schreibweise für eine Konstante, ein direkt adressiertes Register oder ein indirekt adressiertes Register. Beispiel: Bei ADD #1 ist die Syntax „ADD mit Konstantenoperand“, die Semantik ist „Akkumulator um 1 erhöhen“. Bei STORE 3 bedeutet die Syntax „STORE mit direkter Adressierung“, semantisch wird der Akkumulator in R3 gespeichert. STORE #i ist unzulässig, weil in eine Konstante nicht gespeichert werden kann.
Sprungbefehle sind dabei keine gewöhnlichen Rechenbefehle. Sie verändern die Ablaufstruktur, weil sie den Programmzähler nicht einfach zur nächsten Zeile weiterlaufen lassen.
| Syntax | Semantik |
|---|---|
LOAD x |
Lädt den Wert von x in den Akkumulator. |
STORE x |
Speichert den Akkumulatorwert in x; x darf keine Konstante sein. |
ADD x |
Addiert den Wert von x zum Akkumulator. |
SUB x |
Subtrahiert den Wert von x; über den natürlichen Zahlen gilt abgeschnittene Subtraktion: wäre das Ergebnis negativ, wird 0 gesetzt. |
MUL x |
Multipliziert den Akkumulator mit dem Wert von x. |
DIV x |
Dividiert den Akkumulator durch den Wert von x; bei x = 0 endet das Programm. |
GOTO M |
Unbedingter Sprung zur Marke M; der Programmzähler wird auf die Zielmarke gesetzt statt zur nächsten Zeile weiterzugehen. |
JZERO M |
Sprung zu M, wenn der Akkumulator 0 ist; sonst normale Fortsetzung mit der nächsten Zeile. |
JNZERO M |
Sprung zu M, wenn der Akkumulator größer 0 ist; sonst normale Fortsetzung mit der nächsten Zeile. |
END |
Beendet das Programm. |
- Rechenbefehle
LOAD,ADD,SUB,MULundDIVwirken auf den Akkumulator. STORE xschreibt aus dem Akkumulator in ein Register;STORE #iist unzulässig.SUBarbeitet über den natürlichen Zahlen mit abgeschnittener Subtraktion auf0.DIV xbeendet bei Division durch0.- Sprungbefehle verändern die nächste auszuführende Zeile über den Programmzähler.
Schrittweise Programmausführung
Zustand, nächste Zeile und Wirkung von Sprüngen
Zustand, nächste Zeile und Wirkung von Sprüngen
Ein Registermaschinenprogramm wird zeilenweise ausgeführt. Nach normalen Befehlen geht es zur nächsten Zeile, Sprungbefehle ändern die nächste auszuführende Zeile. Die Beispiele sind deshalb als kleine Lernprogression angelegt: erst lineare Rechnung, dann Sprunglogik, danach Terminierungsgrenzen.
Beispiel: f(n) = n + 1 mit Trace
increment ist der Einstieg, weil hier noch kein Sprung nötig ist. Die Eingabe liegt in R1. Das Programm lädt R1 in den Akkumulator, addiert 1, speichert zurück und hält mit END.
- Lernfokus: lineare Ausführung verstehen.
- Begriffe:
ACC,LOAD,ADD,STORE,END. - Der Trace macht sichtbar, welche Zustandsänderung jede Zeile auslöst.
Im Registermaschinen-Werkzeug bildet das Preset increment dieses Beispiel direkt ab.
increment. Welcher Begriff? Trace als Folge von Ausführungsschritten. Was lernt man? Jede Trace-Zeile entspricht genau einem Schritt der Programmausführung.
Zweites Beispiel: Rechnen und Sprünge
Rolle von JZERO, JNZERO und Marken
Rolle von
JZERO, JNZERO und Marken
Kompaktes Schleifenbeispiel mit Marken und Sprüngen
loop-counter ist der zweite Schritt: Jetzt reicht lineares Weiterlaufen nicht mehr aus. Das Programm zählt R1 auf 0 herunter und erhöht pro Durchlauf R2. Entscheidend ist der Programmzähler: Er läuft nicht nur linear weiter, sondern wird durch Sprünge umgesteuert.
- Lernfokus: Wiederholung als Veränderung des Programmzählers verstehen.
- Marken wie
LOOPundENDEdefinieren Sprungziele. JZERO ENDEbeendet den Loopfall beiACC = 0.GOTO LOOPerzeugt den Rücksprung und damit die Wiederholung.- Sprungbefehle verändern den Programmzähler und damit die nächste ausgeführte Zeile.
- Im Werkzeug zeigt
loop-countergenau dieses Rücksprungmuster.
Partiell und total berechenbare Funktionen
Zentrale Unterscheidung für Q3.5
Zentrale Unterscheidung für Q3.5
Eine Funktion ist registermaschinen-berechenbar, wenn es ein Registermaschinenprogramm gibt, das für passende Eingaben die richtigen Ausgaben berechnet. Entscheidend ist dabei nicht nur, ob irgendein Programm technisch endet, sondern ob es die intendierte mathematische Funktion auf ihrem Definitionsbereich korrekt berechnet.
Total berechenbar
- für jede zulässige Eingabe definiert
- Programm hält immer nach endlicher Zeit
- liefert immer ein Ergebnis
- Beispiel:
f(n)=n+1ist total berechenbar.
Partiell berechenbar
- für alle Eingaben des Definitionsbereichs hält das Programm und liefert dort das richtige Ergebnis
- außerhalb des Definitionsbereichs muss das Programm nicht terminieren
- Wichtig: Nicht jedes Programm, das endet, berechnet automatisch eine total definierte Funktion.
Für Division gilt als Funktionsbeispiel oft f(n,m)=n DIV m. Fachlich ist bei m=0 Vorsicht nötig: Die übliche Division über den natürlichen Zahlen ist dort nicht definiert. Nach hessischem Modell beendet DIV 0 das Programm.
Daraus folgt gerade nicht, dass die mathematische Funktion für m=0 total definiert wäre. Programmhältung und mathematische Definiertheit sind nicht dasselbe: Ein Programm kann technisch enden, obwohl die intendierte Funktion für diese Eingabe nicht definiert ist.
Werkzeugperspektive auf den Trace: Total berechenbar heißt, dass die Ausführungsspur für jede zulässige Eingabe endet. Partiell berechenbar heißt, dass die Spur nur für Eingaben des Definitionsbereichs enden muss; außerhalb kann sie unendlich weiterlaufen.
undefined-loop ergänzt die Beispielreihe um die Grenze der Diagnose: Die Ausführung läuft ohne END weiter, bis das Werkzeug aus Sicherheitsgründen bei einer Schrittgrenze (maxSteps) stoppt. Diese Grenze begrenzt nur die konkrete Simulation und löst das Halteproblem nicht allgemein.
Das Halteproblem zeigt, dass man nicht allgemein entscheiden kann, ob ein beliebiges Programm bei einer Eingabe hält. Diese Grenze gilt auch für Registermaschinenprogramme.
Werkzeug: Registermaschinen-Ausführung
Programm eingeben, ausführen und Maschinenzustände nachvollziehen
Programm eingeben, ausführen und Maschinenzustände nachvollziehen
Zum Registermaschinen-Werkzeug
Das Registermaschinen-Werkzeug ersetzt nicht die formale Definition. Es macht sichtbar, wie aus einem statischen Programmtext eine dynamische Folge von Maschinenzuständen wird.
- Programmtext: Befehle stehen zeilenweise; Marken kennzeichnen Sprungziele.
- Registertabelle:
R1, R2, R3, ...speichern natürliche Zahlen als Eingabe-, Zwischen- und Ausgabewerte. - Akkumulator: zentrales Rechenregister für
LOAD,ADD,SUB,MUL,DIV. - Programmzähler: markiert die nächste auszuführende Zeile; Sprungbefehle ändern ihn gezielt.
- Step: einzelne Semantik eines Befehls nachvollziehen.
- Run: Laufverhalten über mehrere Schritte untersuchen.
- Trace: Programmwirkung sichern und Fehler über Befehl, Akkumulator, Register und Wirkung diagnostizieren.
increment: lineare Ausführung und Zusammenspiel vonLOAD,ADD,STORE,END.double: Rechnen mit Registerwerten am Beispiel2n.max: Fallunterscheidung und Sprunglogik.loop-counter: Programmzähler, Marken, Rücksprung und Schleifenverhalten.undefined-loop: Nichtterminierung als Diagnosegrenze;maxStepsist nur eine praktische Simulationsgrenze.
Registermaschinen-Berechenbarkeit
k-stellige Funktionen über den natürlichen Zahlen
k-stellige Funktionen über den natürlichen Zahlen
Formal lässt sich die bisherige Unterscheidung so sichern: Eine partielle k-stellige Funktion f über den natürlichen Zahlen heißt registermaschinen-berechenbar, wenn es eine Registermaschine gibt, die bei jeder Eingabe aus dem Definitionsbereich in R1 bis Rk nach endlicher Zeit mit dem richtigen Ergebnis hält. Ist der Definitionsbereich die ganze betrachtete Eingabemenge und hält das Programm dafür immer, spricht man vom totalen Fall.
- Eingabekonvention:
R1, ..., Rkenthalten die Eingabewerte. - Ausgabekonvention dieser Seite: Ergebnis steht in
R1; der Akkumulator dient als Rechen- und Zwischenspeicher. - Partieller Fall: Für Eingaben außerhalb des Definitionsbereichs ist kein korrektes Ergebnis gefordert; je nach Programm kann Nichtterminieren oder ein technischer Endzustand auftreten.
Weiteres Modell: WHILE-Berechenbarkeit
Unterschiedliche Modelle, gleicher Grundbegriff
Unterschiedliche Modelle, gleicher Grundbegriff
Q3.5 liefert mit der Registermaschine ein konkretes Modell maschinennaher Berechnung. WHILE-Programme beschreiben Berechnung in einem anderen Programmiermodell: Variablen werden verändert, Schleifen steuern die Wiederholung. Die Grundfrage bleibt dieselbe: Welche Funktionen sind algorithmisch berechenbar?
- WHILE-Berechenbarkeit beschreibt algorithmische Berechnung ebenfalls formal.
- Wie bei Registermaschinen gibt es terminierende und nicht terminierende Programme.
- Registermaschinen-, WHILE-, GOTO- und Turing-Berechenbarkeit führen im Kern auf denselben Berechenbarkeitsbegriff.
Verschiedene Modelle setzen unterschiedliche technische Schwerpunkte, beschreiben aber denselben Berechenbarkeitsbegriff. Diese Einordnung bleibt eine vorsichtige Brücke zur Church-Turing-Idee und ersetzt keinen Beweis im Detail.
Grenzen und Verbindung zu Q3.4
Präzises Modell, aber keine Aufhebung der Grenzen
Präzises Modell, aber keine Aufhebung der Grenzen
Registermaschinen helfen, Berechnung präzise und maschinennah zu modellieren. Sie heben die Grenzen der Berechenbarkeit aber nicht auf.
- Manche Programme halten nicht.
- Nicht jede mathematisch mögliche Funktion ist berechenbar.
- Halteproblem und Entscheidbarkeitsgrenzen bleiben bestehen.
Damit schließt sich der Q3-Bogen von formalen Sprachen über Automaten bis zu Berechenbarkeitsmodellen: Unterschiedliche Modelle machen unterschiedliche Aspekte sichtbar, führen aber auf denselben Grundbegriff algorithmischer Berechnung. Der nächste Schritt verschiebt die Frage von „Ist es berechenbar?“ zu „Wie aufwändig ist diese Berechnung?“
Merksätze
- Eine Registermaschine ist ein abstraktes Berechnungsmodell.
- Turingmaschine und Registermaschine unterscheiden sich im Speicher- und Befehlsmodell, führen aber auf denselben Grundbegriff algorithmischer Berechnung.
- Register speichern natürliche Zahlen; der Akkumulator dient als zentrales Rechenregister.
- Eine Ausführungskonfiguration besteht aus Befehlsposition, Akkumulator und Registerbelegung.
- Ein Programm besteht aus elementaren Befehlen und Sprüngen.
- Sprungbefehle verändern den Programmzähler.
- Syntax beschreibt die Form eines Befehls, Semantik seine Wirkung.
- Direkte und indirekte Adressierung unterscheiden, welches Register gemeint ist.
- Registermaschinen modellieren die Berechnung von Funktionen und nicht primär die Spracherkennung.
- Ein Trace macht die Wirkung eines Programms Schritt für Schritt nachvollziehbar.
- Eine total berechenbare Funktion hält für jede zulässige Eingabe.
- Eine partiell berechenbare Funktion muss nur für definierte Eingaben halten.
- Programmhältung und mathematische Definiertheit sind nicht dasselbe.
- Das Werkzeug simuliert konkrete Programme, entscheidet aber nicht allgemein das Halteproblem.
- Registermaschinen-, WHILE- und Turing-Berechenbarkeit beschreiben denselben Grundbegriff algorithmischer Berechnung.
Ausblick
Nach Q3.5 ist die Berechenbarkeitsfrage in zwei Modellperspektiven abgesichert: als Band- und Symbolverarbeitung und als Programm auf Zahlregistern. In vertiefenden Themen rückt nun stärker die Effizienzfrage in den Mittelpunkt: Laufzeit, asymptotische Bewertung und die Schwierigkeit von Problemklassen.