Fachkonzept Programmzähler
Der Programmzähler
Um den Ablauf eines Programms steuern zu können, hatte der Steuermann des universellen Murmelrechners einen Notizzettel. Diesem Notizzettel entspricht im Bonsai der Programmzähler.
Der Programmzähler (kurz "PC" für "program counter") ist ein spezielles Register,
in dem Adressen zwischengespeichert werden.
An der gerade eingestellten Adresse steht im Speicher der Befehl, der gerade bearbeitet wird.
Während der Befehl ausgeführt wird, wird der Programmzähler verändert. Dann steht
im Programmzähler PC die Speicheradresse des Befehls, der anschließend ausgeführt werden soll.
Verändern des PC-Werts
Dieses Programmablaufprotokoll zeigt, dass man verschiedene Mechanismen zur Veränderung des PC-Werts benötigt.
-
Direktes Setzen: Bei einem JMP-Befehl muss man im PC Adressen gezielt setzen können, da darin ja die einzige Aufgabe des Befehls besteht.
Die Adresse, die am Adressbus anliegt, wird direkt in das PC-Register geschrieben. -
Unbedingtes Hochzählen: Bei einem INC- und DEC-Befehl muss man den PC-Wert um eins erhöhen, da nach seiner Ausführung immer der Befehl, der an der nächsten Adresse steht, abgearbeitet wird.
Das geht direkt durch das Betätigen von Schalter A. -
Bedingtes Hochzählen: Bei einem TST-Befehl muss man den PC-Wert mindestens um eins erhöhen oder aber um zwei, sofern auf dem Datenbus eine Null anliegt.
Durch das Betätigen von Schalter A wird wiederum das unbedingte Hochzählen (Erhöhung um mindestens eins) erreicht. Das zusätzliche Betätigen von Schalter B hingegen bewirkt das bedingte Hochzählen.
Die an den Datenbus angeschlossene Nullentdeckung stellt sicher, dass der Ausgang des mit Schalter B verbundenen UND-Gatters nur dann eins werden (und damit den PC erhöhen) kann, wenn tatsächlich eine Null am Datenbus anliegt. Nur dann legt sie selber eine Eins an das UND-Gatter an, in allen anderen Fällen eine Null.
Beim direkten Setzen des PC-Werts haben wir bisher ein Hilfsregister als "Quelle" verwendet. Tatsächlich verfügt der Bonsai dafür über ein weiteres spezielles Register: das Befehlsregister, das im folgenden Abschnitt vorgestellt wird.