Befehle und Programme
Beispiel: Addition
Wie kann man zwei Zahlen addieren, wenn es keinen Befehl für die Addition gibt?
Wir gehen davon aus, dass es zwei Speicherzellen gibt, in denen die Summanden abgelegt sind.
Das Ergebnis der Addition soll in Speicherzelle 0 abgelegt sein.
Bei einer fest vorgegebenen Anzahl von Murmeln in Gefäß 1 ist die Sache ganz einfach:
enferne eine Murmel aus Gefäß 1 lege eine Murmel in Gefäß 0 enferne eine Murmel aus Gefäß 1 lege eine Murmel in Gefäß 0
Etwas komplizierter wird es, wenn das Rechenverfahren für beliebige Anzahlen von Murmeln funktionieren soll. Eine Lösung könnte z.B. so aussehen:
prüfe, ob in Gefäß 1 noch etwas vorhanden ist wenn nicht, dann % es ist in Gefäß 1 nichts vorhanden beende den Vorgang wenn ja, dann % es ist in Gefäß 1 noch etwas vorhanden enferne eine Murmel aus Gefäß 1 lege eine Murmel in Gefäß 0 beginne wieder am Anfang
Diese Lösung lässt sich mit 5 Befehlen formal beschreiben.
0 tst 1 1 jmp 3 2 jmp 6 3 dec 1 4 inc 0 5 jmp 0 6 hlt
Aufgabe 1
Versuche, die Bedeutung der Befehle anhand der oben beschriebenen Lösung zu erschließen.
Rechenbefehle
Zum Rechnen werden die Befehle inc
und dec
benutzt.
Diese Befehle haben als Parameter die Adresse des zu inkrementierenden bzw.
dekrementierenden Speichergefäßes.
Der Befehl inc 0
wird folgendermaßen ausgeführt:
Lege eine Murmel in das Speichergefäß mit der Nummer 0.
Bearbeite anschließend den nächsten Befehl.
Der Befehl dec 1
wird folgendermaßen ausgeführt:
Entferne eine Murmel aus dem Speichergefäß mit der Nummer 1.
Bearbeite anschließend den nächsten Befehl.
Kontrollbefehle
Kontrollbefehle dienen dazu, die Reihenfolge der abzuarbeitenden Befehle festzulegen.
Es gibt beim Murmelrechner nur einen logischen Befehl, den tst
-Befehl.
Mit dem jmp
-Befehl werden Sprünge bei der Abarbeitung von Programmen festgelegt.
Der jmp
-Befehl hat als Parameter die Nummer des nächsten Programmzeile.
Der Befehl jmp 3
wird folgendermaßen ausgeführt:
Setze die Ausführung des Programms mit dem Befehl in der angegebenen Zeilennummer fort
(d. h. bearbeite anschließend den Befehl mit der Zeilennummer 3).
Mit dem tst
-Befehl werden bedingte Sprünge festgelegt.
Der tst
-Befehl hat als Parameter die Adresse des zu überprüfenden Speichergefäßes.
Der Befehl tst 1
wird folgendermaßen ausgeführt:
Prüfe (teste), ob noch Murmeln im Speichergefäß mit der Nummer 1 sind.
Wenn das der Fall ist, dann bearbeite anschließend den nächsten Befehl,
ansonsten bearbeite anschließend den übernächsten Befehl
Der hlt
-Befehl legt fest, dass die Bearbeitung nicht fortgesetzt werden soll.
Der Befehl hlt
hat keinen Parameter.
Murmelprogramme
Murmelprogramme bestehen aus einer Aneinanderreihung von Murmelbefehlen. Pro Zeile steht genau ein Befehl. Die Befehle sind zeilenweise durchnummeriert.
Ein Beispiel für ein Murmelprogramm ist oben zu sehen.
Aufgabe 2
Im vorherigen Abschnitt hast du einige „Murmelprobleme“ (Addition, Subtraktion, Verschieben, Vertauschen, ggf. auch Multiplikation) umgangssprachlich gelöst. Übertrage manche deiner Lösungen in ein Murmelprogramm.
Aufgabe 3
Fülle den zweiten Abschnitt des Wissensspeichers aus.