Station - Programmzähler

Verwaltung des auszuführenden Befehls

Bei der Abarbeitung eines (Registermaschinen-) Programms muss man jeweils die Adresse des nächsten auszuführenden Befehls verwalten.

Für ein Programme ohne Sprungbefehle kann man einfach zur nächsten Programmzeile übergehen.

Abarbeitung eines ProgrammsAbarbeitung eines ProgrammsAbarbeitung eines ProgrammsAbarbeitung eines Programms

Für ein Programme mit Sprungbefehlen ist das schon etwas komplizierter.

Abarbeitung eines ProgrammsAbarbeitung eines ProgrammsAbarbeitung eines ProgrammsAbarbeitung eines ProgrammsAbarbeitung eines ProgrammsAbarbeitung eines Programms

In unserem Rechnermodell wird ein weiteres Hilfsregister eingeführt - das sog. Programmzähler-Register. In diesem Register soll die Adresse des nächsten auszuführenden Befehls zwischengespeichert werden.

Programmzähler

Der Programmzähler verfügt über eine Inkrementieroperation incPC, mit der man den Wert des Registers um 1 erhöhen kann.

Zusätzlich verfügt der Programmzähler über eine Inkrementieroperation incPCz, mit der man den Wert des Registers nur dann um 1 erhöhen kann, wenn der Datenbus den Wert 0 hat (beachte den Pfeil vom Datenbus zum Programmzähler in der Abbildung).

Der Programmzähler ist mit dem Adressbus verbunden. Über den Adressbus kann die Sprungadressen eines JMP-Befehls vom Befehlsregister zum Programmzähler transportiert werden.

Das erweiterte Rechnermodell lässt sich wie folgt mit Hades-Bausteinen realisieren.

Programmzähler
programmzaehler.hds

Aufgabe 1

Initialisiere zunächst den Programmzähler (d.h. setze den Wert auf 0).

Teste zunächst das schrittweise Erhöhen des Programmzählers.

Speichere anschließend im Befehlsregisters einen JMP-Befehl in codierter Form (z.B. JMP 2 in der Darstellung 3002_H). Die Sprungadresse gibt die Adresse des nächsten zu verarbeitenden Befehl im Speicher an. Diese Adresse muss also in den Programmzähler kopiert werden. Teste diesen Kopiervorgang.

Teste auch das bedingte Erhöhen des Programmzählers, wenn der Wert des Datenbus (k)eine 0 ist.

X

Fehler melden

X

Suche