Prozessorgrundlagen: Von-Neumann-Architektur, Teil 3

Phasen der Befehlsbearbeitung

Zum weiteren Verständnis der Befehlsbearbeitung teilen wir alle Befehle in vier Klassen ein:

  • Kopierbefehle zwischen internen Registern

  • Arithmetische und logische Befehle

  • Speichertransferbefehle zwischen internen Registern und externer Speicherzelle

  • Kontrollflussbefehle im weitesten Sinn, wie Jump, Branch, Stop, Wait, No Operation et cetera

Eine Analyse der Abläufe in diesen Befehlen beziehungsweise Befehlsklassen kann anhand der folgenden Aufzählung erfolgen:

1. Die Fetch-Phase: Der erste Zugriff im Ablauf der Befehlsbearbeitung erfolgt, um den eigentlichen Befehlscode in interne Register zu laden. Maßgebend für die Adresse ist der aktuelle Stand des Programmzählers, der am Ende dieser Phase inkrementiert wird. Diese Phase ist für alle Befehle gleich.

2. Die Decode-Phase: Der im internen Register geladene Befehl wird nun dekodiert, um weitere Aktionen entsprechend einleiten zu können. Diese Dekodierung umfasst die Analyse des Befehls selbst, beispielsweise um Informationen zur Befehlsklasse sowie zu Art und Anzahl der benötigten Operanden und deren Adressierungsformat zu erhalten.

3. Die Load-Phase: Die Operanden, die zur Ausführung des Befehls notwendig sind, werden gegebenenfalls in interne Register geladen. Die Phase ist bereits sehr von der Interpretation des Befehls abhängig:

  • Bei Befehlen ohne Operanden ist diese Phase selbstverständlich leer.

  • Operanden in internen Registern, etwa für ein Move zwischen zwei Registern, müssen nicht in interne Datenregister zur weiteren Befehlsbearbeitung geladen werden. Sie können später direkt genutzt werden, so dass auch in diesem Fall diese Phase leer ist.

  • Externe Operanden lassen sich auf verschiedene Arten adressieren, wobei nunmehr ein mehrfacher Zugriff am Bus durchlaufen werden könnte. Im einfachsten Fall stehen die notwendigen Daten in den Speicherstellen, die unmittelbar auf den Befehl folgen, so dass die Adressierung durch den Programmzähler bei gleichzeitigem Inkrement erfolgt.

4. Die Execute-Phase: Nach dem Laden aller Operanden kann der Befehl schließlich ausgeführt werden. Maßgebend hierfür ist der geladene Operationscode im internen Befehlsregister.

Die Execute-Phase unterscheidet sich erheblich für die vier Befehlsklassen und ist für jede Instruktion gesondert zu definieren. Arithmetisch-logische Befehle führt die ALU aus, während Kontrollflussbefehle die Register im Leitwerk beeinflussen.

5. Die Write-back-Phase: Die letzte Phase besteht in dem Zurückschreiben des Ergebnisses, etwa in den Akkumulator, in andere interne Register oder in den externen Speicher. Diese Phase steht in engem Zusammenhang mit der Exe-cute-Phase, so dass die Trennung gelegentlich willkürlich erscheinen kann.

Die Unterteilung in fünf auszuführende Phasen im Rahmen der Befehlsbearbeitung ist durchaus variierbar, und zwar begründbar in beide Richtungen. Weniger Phasen sind gleichbedeutend mit einer geringeren Anfälligkeit gegenüber Datenabhängigkeiten im Kontrollfluss [1]. Bei mehr Phasen ist die einzelne einfacher und schneller durchführbar, so dass eine Beschleunigung der Ausführung die Folge sein kann. Die Einteilung in die Ausführungsphasen ist in jedem Fall maßgeblich vom Design des Prozessors bestimmt.