Einstieg - Spaghetticode
Steuerung einer Registermaschine
Registermaschinen können als einfaches Maschinenmodell angesehen werden, mit dem wesentliche Bestandteile von Computern erfasst werden (vgl. auch Murmelrechner - Akteure und Durchführung).
Registermaschinen enthalten einen Speicher, der aus einzelnen, durchnummerierten Registern besteht, in denen natürliche Zahlen gespeichert werden können.
Zur Steuerung der Registermaschinen gibt es eine einfache maschinennahe Programmiersprache, die nur die folgenden 5 Befehle kennt:
Befehl | Bedeutung |
---|---|
x INC i | Erhöhe Register i um 1. Gehe zu Zeile x+1. |
x DEC i | Erniedrige (sofern möglich) Register i um 1. Gehe zu Zeile x+1. |
x JMP i | Gehe zu Zeile i. |
x TST i | Wenn Register i keine 0 enthält, dann gehe zu Zeile x+1, sonst zu Zeile x+2. |
x HLT | Beende die Bearbeitung. |
Aufgabe 1
Was leistet das Programm in der Abbildung oben?
Ein komplizierteres Programm zur Steuerung einer Registermaschine
Programme zur Steuerung einer Registermaschine werden leicht unübersichtlich.
0 TST 1 1 JMP 3 2 JMP 6 3 TST 2 4 JMP 12 5 JMP 9 6 TST 2 7 JMP 18 8 HLT 9 TST 1 10 JMP 16 11 HLT 12 DEC 1 13 DEC 2 14 INC 0 15 JMP 0 16 DEC 1 17 JMP 9 18 DEC 2 19 JMP 6
Aufgabe 2
(a) Kannst du auf den ersten Blick erkennen, was das gezeigte Programm leistet?
(b) Führe das Programm aus. Gehe von der folgenden Anfangsbelegung der Register aus: {R0: 0; R1: 4; R2:6; R3:0; ...}. Weißt du jetzt, was das Programm leistet? Wenn nicht, dann führe weitere Tests durch.
(c) Warum ist es so schwer zu erkennen, was das Programm leistet?