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.

Tassenspeicher vorher

Das Ergebnis der Addition soll in Speicherzelle 0 abgelegt sein.

Tassenspeicher nachher

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 Gefäß 1 leer ist
wenn ja, dann 
    beende den Vorgang
wenn nein, dann
    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.

X

Fehler melden

X

Suche