Qualifikationsphase

Q3.5 · Registermaschine

Berechnung mit Registern, Akkumulator und elementaren Befehlen

Q3.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
Orientierung: Wozu ein weiteres Berechnungsmodell?
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
Registermaschine
Leitidee

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
Aufbau einer Registermaschine
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).

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.

Wichtig

Das Modell hat theoretisch unendlich viele Register, ein konkretes Programm nutzt aber immer nur endlich viele davon.

Operandenarten
Operandenarten
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.

Befehlssatz
Befehlssatz: Syntax und Semantik
Form der Befehle und ihre Wirkung auf den Zustand
Unterscheidung

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.
Programmausführung
Schrittweise Programmausführung
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.

Im Registermaschinen-Werkzeug bildet das Preset increment dieses Beispiel direkt ab.

Registermaschinenbeispiel f(n)=n+1 mit Programmlisting und Kurztrace für R1=4
Was sieht man? Programm, PC-Fortschritt und Kurztrace zum Preset increment. Welcher Begriff? Trace als Folge von Ausführungsschritten. Was lernt man? Jede Trace-Zeile entspricht genau einem Schritt der Programmausführung.
Beispiele
Zweites Beispiel: Rechnen und Sprünge
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.

Schleifenbeispiel mit LOOP und ENDE sowie JZERO und GOTO als Programmzähler-Sprünge
Was sieht man? Ein kompaktes Loop-Programm mit markierten Sprungzielen und PC-Verlauf. Welcher Begriff? Sprungbefehle als Steuerung des Programmzählers. Was lernt man? Schleifen entstehen durch Rücksprünge auf frühere Marken.
Partiell und total
Partiell und total berechenbare Funktionen
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
Partiell berechenbar

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.

Anschluss an Q3.4

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
Werkzeug: Registermaschinen-Ausführung
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.

Abstrahierte Werkzeugansicht mit ACC, PC, aktuellem Befehl, Programmlisting, Registeransicht und Trace
Was sieht man? Die zentrale Werkzeugansicht aus Zustand, Listing, Register und Trace. Welcher Begriff? Maschinenzustand als Kombination aus PC, ACC und Registerbelegung. Was lernt man? Programmwirkung wird erst durch die gemeinsame Sicht auf alle Teilansichten verständlich.
Registermaschinen-Berechenbarkeit
Registermaschinen-Berechenbarkeit
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.

WHILE-Berechenbarkeit
Weiteres Modell: WHILE-Berechenbarkeit
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?

Einordnung

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
Grenzen und Verbindung zu Q3.4
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.

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

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.