Nachricht für neue Nutzer.
Nachricht für engagierte Nutzer.

Lernpfad Know-How-Computer/KHC als Von-Neumann-Rechner: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
KKeine Bearbeitungszusammenfassung
Markierung: Quelltext-Bearbeitung 2017
KKeine Bearbeitungszusammenfassung
Markierung: Quelltext-Bearbeitung 2017
 
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
__NOTOC__
__NOTOC__
{{Box|Der Know-How-Computer als Von-Neumann-Rechner|Beim KHC übernehmen wir selbst die Rolle des Prozessors, also desjenigen elektronischen Bausteins, der dafür sorgt, dass ein Maschinenprogramm Schritt für Schritt ausgeführt wird. In diesem Kapitel werden nun die elektronischen Komponenten näher beschrieben, aus denen ein „echter“ Prozessor besteht. Diese modellhafte Darstellung orientiert sich an der so genannten „Von-Neumann-Architektur“, die der Mathematiker John von Neumann zwar schon 1945 entwickelt hat, die aber auch heute noch den Grundaufbau der meisten gängigen Computer beschreibt.|Lernpfad}}  
{{Fortsetzung|
vorher=zurück|
vorherlink=Lernpfad_Know-How-Computer/KHC_Programmieraufgaben_Teil_2|
weiter=weiter|
weiterlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|
übersicht=Startseite|
übersichtlink=Lernpfad_Know-How-Computer}}
 
{{Box|Der Know-How-Computer als Von-Neumann-Rechner|Beim KHC übernehmen wir selbst die Rolle des Prozessors, also desjenigen elektronischen Bausteins, der dafür sorgt, dass ein Maschinenprogramm Schritt für Schritt ausgeführt wird. In diesem Kapitel werden nun die elektronischen Komponenten näher beschrieben, aus denen ein "echter" Prozessor besteht. Diese modellhafte Darstellung orientiert sich an der so genannten Von-Neumann-Architektur, die der Mathematiker John von Neumann zwar schon 1945 entwickelt hat, die aber auch heute noch den Grundaufbau der meisten gängigen Computer beschreibt.|Lernpfad}}  


==== Die Von-Neumann-Architektur ====
==== Die Von-Neumann-Architektur ====
Die Von-Neumann-Architektur unterscheidet die Hauptkomponenten
Die Von-Neumann-Architektur unterscheidet die Hauptkomponenten
* Steuerwerk, das den Programmablauf steuert,
* '''Steuerwerk''', das den Programmablauf steuert,
* Rechenwerk, das Rechnungen und logische Operationen wie z.B. Größenvergleiche von Zahlen durchführt,
* '''Rechenwerk''', das Rechnungen und logische Operationen wie z.B. Größenvergleiche von Zahlen durchführt,
* Speicherwerk, das den Zugriff auf den Hauptspeicher verwaltet,
* '''Speicherwerk''', das den Zugriff auf den Hauptspeicher verwaltet.
* ein so genannte Bus-System, das die Verbindung zwischen den anderen Komponenten herstellt.
* Als '''Bus-System''' bezeichnet man die Verbindungsleitungen, über die Adressen, Daten und Steuersignale zwischen den einzelnen Komponenten transportiert werden.  
 
Die Hauptkomponenten enthalten verschiedene Register. Das sind kleine Speicherbausteine, auf die die Komponenten sehr schnell zugreifen können.
 
Das '''Steuerwerk''' enthält als Register den Programmzähler (PZ), der immer die Adresse des aktuellen Befehls enthält, sowie das Befehlsregister (BR), das diesen Befehl selbst (z.B. inc 4) enthält und nochmals in einen Operations-Teil (enthält z.B. „inc“) und einen Adress-Teil (enthält z.B. „4“) unterteilt wird. Außerdem befindet sich im Steuerwerk der so genannte Dekodierer, der die Maschinenbefehle in noch kleinere Arbeitsschritte (Mikrobefehle) zerlegt.
 
Das '''Rechenwerk''' verfügt über ein Register, das als Akkumulator (Akku) bezeichnet wird. In diesem wird der Wert gespeichert, mit dem gerade gerechnet wird. Die Berechnung selbst übernimmt die so genannte „Arithmetisch-logische Einheit“ (ALU). Beim KHC muss diese lediglich drei Operationen ausführen können, nämlich den Akku um 1 erhöhen, ihn um 1 verringern und prüfen, ob er den Wert 0 enthält. Außerdem verfügt das Rechenwerk noch über einige Status-Flags, die etwas über den Zustand des Rechenergebnisses aussagen. Flags sind Minispeichereinheiten, die entweder den Wert „wahr“ (Ziffer 1) oder „falsch“ (Ziffer 0) speichern können. Beispiele sind das Zero-Flag, das von der ALU auf den Wert „wahr“ gesetzt wird, wenn der Wert im Akku gleich 0 (zero) ist. Ein anderes Flag, das Overflow-Flag, zeigt an, ob bei einer Berechnung ein Bereichsüberlauf (overflow) aufgetreten ist. Das könnte z.B. passieren, wenn der Wert im Akku durch eine Berechnung so groß wird, dass er anschließend nicht mehr in den Akku hineinpasst.
 
Steuerwerk und Rechenwerk werden zusammen auch als „Zentraleinheit“ oder „Central Processing Unit“ (CPU) bezeichnet. Zur CPU gehört außerdem noch eine Uhr, die als Schrittmacher den Takt vorgibt, in dem die einzelnen Schritte ausgeführt werden.


Das '''Speicherwerk''' besitzt ein Adress- und ein Datenregister (AR und DR). Wenn der Inhalt einer Zelle aus dem Hauptspeicher gelesen werden soll, dann wird die Adresse dieser Zelle in das Adressregister kopiert und über ein Steuersignal die Aufforderung zum „Lesen“ gegeben. Das Speicherwerk kopiert daraufhin den Inhalt der angegebenen Zelle in das Datenregister. Soll dagegen ein Wert in einer Hauptspeicherzelle gespeichert werden, so wird de ren Adresse im Adressregister und der Speicherwert im Datenregister abgelegt. Anschließend wird über das Steuersignal „Schreiben“ das Speichern des Wertes in der entsprechenden Zelle des Hauptspeichers veranlasst.
Innerhalb der Hauptkomponenten gibt es verschiedene so genannte Register. Das sind kleine Speicherelemente, auf die die Komponenten direkt und sehr schnell zugreifen können. Zur Rechnerarchitektur gehört eigentlich noch ein '''Ein- und Ausgabewerk''', worauf hier aber verzichtet wird, da es im Zusammenhang mit dem KHC nicht benötigt wird.
Die folgende Abbildung zeigt schematisch den Aufbau der Von-Neumann-Architektur. &nbsp;<i class="fa fa-universal-access fa-1x" aria-hidden="true"></i> &nbsp;Diese Grafik gibt es im [[Lernpfad_Know-How-Computer/Anhang|Anhang]] auch als taktile Schwellpapier-Kopiervorlage mit Braillebeschriftung.
<!--
{{Box|1= Hinweis
|2=
|3=}}
-->
[[Datei:KHC Von-Neumann-Architektur Arial24.png|left|350px|Die Komponenten Steuerwerk, Rechenwerk, Speicherwerk und Bus-System werden schematisch dargestellt.]]


Zur Rechnerarchitektur gehört eigentlich noch ein '''Ein- und Ausgabewerk''', worauf hier aber verzichtet wird, da es im Zusammenhang mit dem KHC nicht benötigt wird.
Das '''Steuerwerk''' enthält als Register den Programmzähler (PZ), der immer die Adresse des aktuellen Befehls enthält, sowie das Befehlsregister (BR), das diesen Befehl selbst (z.B. inc 4) enthält und nochmals in einen Operations-Teil (enthält z.B. den Befehlsbezeichner inc) und einen Adress-Teil (enthält z.B. den Wert 4) unterteilt wird. Außerdem befindet sich im Steuerwerk der so genannte Dekodierer, der die Maschinenbefehle in noch kleinere Arbeitsschritte (Mikrobefehle) zerlegt.


Die folgende Abbildung zeigt schematisch den Aufbau der Von-Neumann-Architektur.
Das '''Rechenwerk''' verfügt über ein Register, das als Akkumulator (Akku) bezeichnet wird. In diesem wird der Wert gespeichert, mit dem gerade gerechnet wird. Die Berechnung selbst übernimmt die so genannte Arithmetisch-logische Einheit (ALU). Außerdem enthält das Rechenwerk noch ein Flag-Register. Flags sind Minispeichereinheiten, die entweder den Wert "wahr" (Ziffer 1) oder "falsch" (Ziffer 0) speichern können. Beim KHC muss die ALU lediglich vier Operationen ausführen können, nämlich "den Akku um 1 erhöhen", "den Akku um 1 verringern", "überprüfen, ob der Akku den Wert 0 enthält. Wenn ja, dann das Zero-Flag auf 1, andernfalls auf 0 setzen" und "den Akku um den Wert im Zero-Flag erhöhen". <br>
Steuerwerk und Rechenwerk werden zusammen auch als Zentraleinheit oder Central Processing Unit (CPU) bezeichnet. Zur CPU gehört außerdem noch eine Uhr, die als Schrittmacher den Takt vorgibt, in dem die einzelnen Schritte ausgeführt werden.


Das '''Speicherwerk''' besitzt ein Adress- und ein Datenregister (AR und DR). Sie stellen als Schnittstellen die Verbindung  zwischen dem Hauptspeicher und den anderen Hauptkomponenten her. Wenn der Inhalt einer Zelle aus dem Hauptspeicher gelesen werden soll, dann wird die Adresse dieser Zelle in das Adressregister AR kopiert und über ein Steuersignal die Aufforderung zum Lesen gegeben. Das Speicherwerk kopiert daraufhin den Inhalt der angegebenen Zelle in das Datenregister DR, von wo es dann zur weiteren Verarbeitung abgeholt werden kann. Soll dagegen ein Wert in einer Hauptspeicherzelle gespeichert werden, so wird deren Adresse im Adressregister AR und der Speicherwert im Datenregister DR abgelegt. Anschließend wird über das Steuersignal "Schreiben" das Speichern des Wertes in der entsprechenden Zelle des Hauptspeichers veranlasst.
{{clear}}
==== Der Von-Neumann-Zyklus am Beispiel des inc-Befehls ====
==== Der Von-Neumann-Zyklus am Beispiel des inc-Befehls ====
Das Zusammenspiel der Prozessor-Komponenten soll am Beispiel der Ausführung eines inc-Befehls erklärt werden. Der Ablauf einer solchen Befehlsausführung wird in mehrere Phasen unterteilt, die den so genannten Von-Neumann-Zyklus bilden.
Das Zusammenspiel der Prozessor-Komponenten soll am Beispiel der Ausführung eines inc-Befehls erklärt werden. Der Ablauf einer solchen Befehlsausführung wird in mehrere Phasen unterteilt, die den so genannten [https://de.wikipedia.org/wiki/Von-Neumann-Zyklus Von-Neumann-Zyklus] bilden. Jeder Zyklus besteht aus einer Reihe so genannter Mikroprogrammschritte. 
 
Das Beispiel geht von folgender Ausgangssituation aus: Im Hauptspeicher steht das Programm Beispiel 1 „x plus 2“ aus dem obigen Kapitel „Erste Schritte“ und der Programmzähler zeigt auf die Adresse 1:


Unser Beispiel geht von folgender Ausgangssituation aus: Im Hauptspeicher steht das Programm "x plus 2" aus dem Kapitel [[Lernpfad_Know-How-Computer/KHC-Maschinensprache_-_erste_Schritte_Teil_1|KHC-Maschinensprache - erste Schritte Teil 1]]:
<pre>
<pre>
==> 1: inc 4
==> 1: inc 4
    2: inc 4
    2: inc 4
    3: stp
    3: stp
    4: 0
    4: 0
</pre>
</pre>
Am Anfang enthält der Programmzähler PZ die Adresse 1 und in der Zelle mit dieser Adresse steht der Befehl "inc 4". In der Speicherzelle 4 steht der Datenwert 0.


[[Datei:KHC Von-Neumann-Architektur Arial24.png|left|300px|Die Komponenten Steuerwerk, Rechenwerk, Speicherwerk und Bus-System werden schematisch dargestellt.]]
===== 1. Phase: FETCH (Befehl holen) =====
Der nächste Befehl, der laut Programmzähler PZ ausgeführt werden soll, wird aus dem Hauptspeicher geholt und ins Befehlsregister BR geladen (Schritte 1 bis 4). Außerdem wird der Programmzähler (vorsorglich) um 1 erhöht (Schritte 5 bis 8). Im Beispiel werden die folgenden Mikroprogrammschritte ausgeführt:
# Inhalt von PZ (Wert 1) an AR senden
# Signal "Lesen" von Steuerwerk an Speicherwerk senden
# Inhalt von Hauptspeicherzelle 1 (inc 4) lesen und an DR übergeben
# Inhalt von DR (inc 4) an BR senden
# Inhalt von PZ (Wert 1) an Akku senden
# Signal "Akku um 1 erhöhen" von Steuerwerk an ALU senden
# ALU führt Erhöhung durch und hinterlässt Wert 2 im Akku
# Inhalt von Akku (Wert 2) an PZ senden


===== 1. Phase: FETCH (Befehl holen) =====
Diese FETCH-Phase, in der der nächste auszuführende Maschinenbefehl aus dem Hauptspeicher geholt wird, läuft für alle Befehle gleich ab. Die nun folgenden Schritte hängen dagegen jeweils von dem gerade geholten Befehl ab.
Der nächste zu bearbeitende Befehl wird entsprechend der Adresse im Register Programmzähler PZ aus dem Hauptspeicher geholt und ins Befehlsregister BR geladen. Außerdem wird der Programmzähler (vorsorglich) um 1 erhöht.
# Wert 1 von PZ an AR
# Signal „Lesen“ von Steuerwerk an Speicherwerk
# „inc 4“ von Hauptspeicher an DR
# „inc 4“ von DR an BR
# Wert „1“ von PZ an Akku
# Signal „Akku um 1 erhöhen“ von Steuerwerk an ALU
# Wert „2“ von ALU an Akku
# Wert „2“ von Akku an PZ


===== 2. Phase: DECODE (Befehl dekodieren) =====
===== 2. Phase: DECODE (Befehl dekodieren) =====
Der Dekodierer des Steuerwerks zerlegt die Ausführung des Befehls „inc“, der im Operations-Teil des BR steht, in die folgenden Mikroprogrammschritte.
Der Dekodierer des Steuerwerks enthält für jeden Maschinenbefehl eine passende Sequenz von Mikroprogrammschritten und sorgt nun dafür, dass genau diese Sequenz als nächstes ausgeführt wird. In unserem Beispiel sind das für den Befehl inc die folgenden Schritte.


===== 3. Phase: FETCH OPERANDS (Operanden holen) =====
===== 3. Phase: FETCH OPERANDS (Operanden holen) =====
Wenn hinter dem Befehlsbezeichner eine Adresse steht, wird der Inhalt der entsprechenden Zelle, also der Wert, der durch den Befehl verändert werden soll,  aus dem Hauptspeicher geholt.
Wenn hinter dem Befehlsbezeichner die Adresse einer Zelle steht, in der sich ein Datenwert befindet (also inc, dec oder isz), dann muss erst einmal noch dieser Wert, den man auch als Operanden bezeichnet, aus der entsprechenden Zelle des Hauptspeichers geholt werden. Im Beispiel steht hinter inc die Adresse 4. Der Wert, der an dieser Adresse steht, ist 0. Dieser Wert, der um 1 erhöht werden soll, wird als nächstes aus dem Hauptspeicher geholt und ins DR transportiert:
# Adresse „4“ von Befehlsregister-Adressteil an Adressregister AR
# Inhalt von BR-Adressteil (Adresse 4) an Adressregister AR senden
# Signal „Lesen“ von Steuerwerk an Speicherwerk
# Signal "Lesen" von Steuerwerk an Speicherwerk senden
# Wert „0“ von Hauptspeicher an DR
# Inhalt von Speicherstelle 4 (Wert 0) aus Hauptspeicher lesen und an DR übergeben


===== 4. Phase EXECUTE (Befehl ausführen) =====
===== 4. Phase EXECUTE (Befehl ausführen) =====
Die ALU des Rechenwerks führt die durch den Befehl vorgegebene arithmetische oder logische Operation aus. Bei einem Sprungbefehl wird ggf. der in der ersten Phase vorsorglich schon erhöhte Programmzähler auf einen neuen Wert gesetzt.
Die ALU des Rechenwerks führt die durch den Befehl vorgegebene arithmetische oder logische Operation aus. Bei einem Sprungbefehl wird ggf. der in der ersten Phase vorsorglich schon erhöhte Programmzähler auf einen neuen Wert gesetzt. In unserem Beispiel wird der Wert 0 vom Akku um 1 erhöht.
# Wert „0“ von DR an Akku
# Inhalt von DR (Wert 0) an Akku senden
# Signal „Akku um 1 erhöhen“ von Steuerwerk an ALU
# Signal "Akku um 1 erhöhen" von Steuerwerk an ALU senden
# Wert „2“ von ALU an Akku
# ALU führt Erhöhung durch und hinterlässt den Wert 1 im Akku  


===== 5. Phase WRITE BACK (Ergebnis in den Speicher zurückschreiben) =====
===== 5. Phase WRITE BACK (Ergebnis in den Speicher zurückschreiben) =====
Wenn durch den Befehl der Wert in einer Speicherzelle neu berechnet wurde, wird das Ergebnis der Berechnung in diese Zelle zurückgeschrieben.
Wenn durch den Befehl der Wert in einer Speicherzelle neu berechnet wurde, wird das Ergebnis der Berechnung in diese Zelle zurückgeschrieben. Im Beispiel wird der Wert 1 in die Speicherzelle 4 geschrieben und damit der alte Wert 0 überschrieben.
# Adresse „4“ von Befehlsregister-Adressteil an AR
# Inhalt von BR-Adressteil (Adresse 4) an AR senden
# Signal „Schreiben“ von Steuerwerk an Speicherwerk
# Inhalt von Akku (Wert 1) an DR senden
# Wert „1“ von DR an Zelle Nr. 4 im Hauptspeicher
# Signal "Schreiben" von Steuerwerk an Speicherwerk senden
# Inhalt von DR (Wert 1) in Zelle Nr. 4 des Hauptspeichers schreiben


Ergebnis des ersten Durchlaufs: In der Speicherzelle 4 steht jetzt der Wert 1 und der Programmzähler zeigt auf die Zelle mit der Adresse 2, in der der nächste Programmbefehl steht. Mit diesem beginnt der Von-Neumann-Zyklus nun wieder von vorne - so lange, bis der Stop-Befehl erreicht und ausgeführt wird.
Ergebnis des ersten Durchlaufs: In der Speicherzelle 4 steht jetzt der Wert 1 und der Programmzähler zeigt auf die Zelle mit der Adresse 2, in der der nächste Programmbefehl steht. Mit diesem beginnt der Von-Neumann-Zyklus nun wieder von vorne - so lange, bis der Stop-Befehl erreicht und ausgeführt wird.
{{Box|1. Aufgabe|Beschreibe für den Maschinenbefehl <code>jmp 1</code> die Mikroprogrammschritte der 4. Phase des Von-Neumann-Zyklus analog zum Beispiel oben. Warum entfallen hier die 3. und die 5. Phase?|Üben}}
{{Lösung versteckt|Nach der 1. Phase (Befehl holen) steht im Befehlsregister BR der Befehl jmp 1.
In der 4. Phase (Befehl ausführen) muss nur ein einziger Mikroprogrammschritt ausgeführt werden, nämlich:<br>&nbsp;&nbsp;Inhalt von BR-Adressteil (Adresse 1) an PZ senden
Die 3. und die 5. Phase entfallen hier, weil die Adresse 1 eine Sprungadresse ist und nicht die Adresse eines Operanden, also eines Datenwertes, der aus dem Hauptspeicher gelesen oder dorthin zurückgeschrieben werden muss.
}}
{{Box|2. Aufgabe|Beschreibe für den Maschinenbefehl <code>1: isz 6</code> mit <code>6: 0</code> die  Mikroprogrammschritte der 3. und 4. Phase des Von-Neumann-Zyklus. Warum entfällt hier die 5. Phase?|Üben}}
{{Lösung versteckt|
Die Adresse 6 ist hier die Adresse eines Operanden. Dieser muss zwar aus dem Hauptspeicher ''gelesen'' werden, um feststellen zu können, ob er den Wert 0 besitzt. Er muss aber nicht ''verändert'' und damit auch nicht in den Hauptspeicher ''zurückgeschrieben'' werden. Daher ist hier zwar die Phase 3 notwendig, aber nicht die Phase 5. In Phase 1 wurde standardmäßig der PZ schon vorsorglich von 1 auf 2 erhöht. Er muss nun also noch einmal um 1 erhöht werden, weil an der Adresse 6 der Wert 0 steht.
3. Phase (Operand holen)
# Inhalt von BR-Adressteil (Adresse 6) an Adressregister AR senden
# Signal "Lesen" von Steuerwerk an Speicherwerk senden
# Inhalt von Speicherstelle 6 (Wert 0) aus Hauptspeicher lesen und an DR übergeben
4. Phase (Befehl ausführen)
# Inhalt von DR (Wert 0) an Akku senden
# Signal "Akku auf 0 prüfen" von Steuerwerk an ALU senden
# ALU setzt das Zero-Flag - hier auf den Wert 1
# Inhalt von PZ (Adresswert 2) an Akku senden 
# Signal "Akku um Zero-Flag erhöhen" von Steuerwerk an ALU senden
# ALU erhöht Akku von 2 auf 3
# Inhalt von Akku (Wert 3) an PZ senden
}}
{{Fortsetzung|
vorher=zurück|
vorherlink=Lernpfad_Know-How-Computer/KHC_Programmieraufgaben_Teil_2|
weiter=weiter|
weiterlink=Lernpfad_Know-How-Computer/Know-How-Assembler_-_Grammatik_einer_formalen_Sprache|
übersicht=Startseite|
übersichtlink=Lernpfad_Know-How-Computer}}
[[Kategorie:Know-How-Computer]]
[[Kategorie:Informatik]]
[[Kategorie:Sekundarstufe 2]]

Aktuelle Version vom 30. Juli 2025, 19:20 Uhr

Der Know-How-Computer als Von-Neumann-Rechner
Beim KHC übernehmen wir selbst die Rolle des Prozessors, also desjenigen elektronischen Bausteins, der dafür sorgt, dass ein Maschinenprogramm Schritt für Schritt ausgeführt wird. In diesem Kapitel werden nun die elektronischen Komponenten näher beschrieben, aus denen ein "echter" Prozessor besteht. Diese modellhafte Darstellung orientiert sich an der so genannten Von-Neumann-Architektur, die der Mathematiker John von Neumann zwar schon 1945 entwickelt hat, die aber auch heute noch den Grundaufbau der meisten gängigen Computer beschreibt.

Die Von-Neumann-Architektur

Die Von-Neumann-Architektur unterscheidet die Hauptkomponenten

  • Steuerwerk, das den Programmablauf steuert,
  • Rechenwerk, das Rechnungen und logische Operationen wie z.B. Größenvergleiche von Zahlen durchführt,
  • Speicherwerk, das den Zugriff auf den Hauptspeicher verwaltet.
  • Als Bus-System bezeichnet man die Verbindungsleitungen, über die Adressen, Daten und Steuersignale zwischen den einzelnen Komponenten transportiert werden.

Innerhalb der Hauptkomponenten gibt es verschiedene so genannte Register. Das sind kleine Speicherelemente, auf die die Komponenten direkt und sehr schnell zugreifen können. Zur Rechnerarchitektur gehört eigentlich noch ein Ein- und Ausgabewerk, worauf hier aber verzichtet wird, da es im Zusammenhang mit dem KHC nicht benötigt wird. Die folgende Abbildung zeigt schematisch den Aufbau der Von-Neumann-Architektur.    Diese Grafik gibt es im Anhang auch als taktile Schwellpapier-Kopiervorlage mit Braillebeschriftung.

Die Komponenten Steuerwerk, Rechenwerk, Speicherwerk und Bus-System werden schematisch dargestellt.

Das Steuerwerk enthält als Register den Programmzähler (PZ), der immer die Adresse des aktuellen Befehls enthält, sowie das Befehlsregister (BR), das diesen Befehl selbst (z.B. inc 4) enthält und nochmals in einen Operations-Teil (enthält z.B. den Befehlsbezeichner inc) und einen Adress-Teil (enthält z.B. den Wert 4) unterteilt wird. Außerdem befindet sich im Steuerwerk der so genannte Dekodierer, der die Maschinenbefehle in noch kleinere Arbeitsschritte (Mikrobefehle) zerlegt.

Das Rechenwerk verfügt über ein Register, das als Akkumulator (Akku) bezeichnet wird. In diesem wird der Wert gespeichert, mit dem gerade gerechnet wird. Die Berechnung selbst übernimmt die so genannte Arithmetisch-logische Einheit (ALU). Außerdem enthält das Rechenwerk noch ein Flag-Register. Flags sind Minispeichereinheiten, die entweder den Wert "wahr" (Ziffer 1) oder "falsch" (Ziffer 0) speichern können. Beim KHC muss die ALU lediglich vier Operationen ausführen können, nämlich "den Akku um 1 erhöhen", "den Akku um 1 verringern", "überprüfen, ob der Akku den Wert 0 enthält. Wenn ja, dann das Zero-Flag auf 1, andernfalls auf 0 setzen" und "den Akku um den Wert im Zero-Flag erhöhen".
Steuerwerk und Rechenwerk werden zusammen auch als Zentraleinheit oder Central Processing Unit (CPU) bezeichnet. Zur CPU gehört außerdem noch eine Uhr, die als Schrittmacher den Takt vorgibt, in dem die einzelnen Schritte ausgeführt werden.

Das Speicherwerk besitzt ein Adress- und ein Datenregister (AR und DR). Sie stellen als Schnittstellen die Verbindung zwischen dem Hauptspeicher und den anderen Hauptkomponenten her. Wenn der Inhalt einer Zelle aus dem Hauptspeicher gelesen werden soll, dann wird die Adresse dieser Zelle in das Adressregister AR kopiert und über ein Steuersignal die Aufforderung zum Lesen gegeben. Das Speicherwerk kopiert daraufhin den Inhalt der angegebenen Zelle in das Datenregister DR, von wo es dann zur weiteren Verarbeitung abgeholt werden kann. Soll dagegen ein Wert in einer Hauptspeicherzelle gespeichert werden, so wird deren Adresse im Adressregister AR und der Speicherwert im Datenregister DR abgelegt. Anschließend wird über das Steuersignal "Schreiben" das Speichern des Wertes in der entsprechenden Zelle des Hauptspeichers veranlasst.

Der Von-Neumann-Zyklus am Beispiel des inc-Befehls

Das Zusammenspiel der Prozessor-Komponenten soll am Beispiel der Ausführung eines inc-Befehls erklärt werden. Der Ablauf einer solchen Befehlsausführung wird in mehrere Phasen unterteilt, die den so genannten Von-Neumann-Zyklus bilden. Jeder Zyklus besteht aus einer Reihe so genannter Mikroprogrammschritte.

Unser Beispiel geht von folgender Ausgangssituation aus: Im Hauptspeicher steht das Programm "x plus 2" aus dem Kapitel KHC-Maschinensprache - erste Schritte Teil 1:

==> 1: inc 4
    2: inc 4
    3: stp
    4: 0

Am Anfang enthält der Programmzähler PZ die Adresse 1 und in der Zelle mit dieser Adresse steht der Befehl "inc 4". In der Speicherzelle 4 steht der Datenwert 0.

1. Phase: FETCH (Befehl holen)

Der nächste Befehl, der laut Programmzähler PZ ausgeführt werden soll, wird aus dem Hauptspeicher geholt und ins Befehlsregister BR geladen (Schritte 1 bis 4). Außerdem wird der Programmzähler (vorsorglich) um 1 erhöht (Schritte 5 bis 8). Im Beispiel werden die folgenden Mikroprogrammschritte ausgeführt:

  1. Inhalt von PZ (Wert 1) an AR senden
  2. Signal "Lesen" von Steuerwerk an Speicherwerk senden
  3. Inhalt von Hauptspeicherzelle 1 (inc 4) lesen und an DR übergeben
  4. Inhalt von DR (inc 4) an BR senden
  5. Inhalt von PZ (Wert 1) an Akku senden
  6. Signal "Akku um 1 erhöhen" von Steuerwerk an ALU senden
  7. ALU führt Erhöhung durch und hinterlässt Wert 2 im Akku
  8. Inhalt von Akku (Wert 2) an PZ senden

Diese FETCH-Phase, in der der nächste auszuführende Maschinenbefehl aus dem Hauptspeicher geholt wird, läuft für alle Befehle gleich ab. Die nun folgenden Schritte hängen dagegen jeweils von dem gerade geholten Befehl ab.

2. Phase: DECODE (Befehl dekodieren)

Der Dekodierer des Steuerwerks enthält für jeden Maschinenbefehl eine passende Sequenz von Mikroprogrammschritten und sorgt nun dafür, dass genau diese Sequenz als nächstes ausgeführt wird. In unserem Beispiel sind das für den Befehl inc die folgenden Schritte.

3. Phase: FETCH OPERANDS (Operanden holen)

Wenn hinter dem Befehlsbezeichner die Adresse einer Zelle steht, in der sich ein Datenwert befindet (also inc, dec oder isz), dann muss erst einmal noch dieser Wert, den man auch als Operanden bezeichnet, aus der entsprechenden Zelle des Hauptspeichers geholt werden. Im Beispiel steht hinter inc die Adresse 4. Der Wert, der an dieser Adresse steht, ist 0. Dieser Wert, der um 1 erhöht werden soll, wird als nächstes aus dem Hauptspeicher geholt und ins DR transportiert:

  1. Inhalt von BR-Adressteil (Adresse 4) an Adressregister AR senden
  2. Signal "Lesen" von Steuerwerk an Speicherwerk senden
  3. Inhalt von Speicherstelle 4 (Wert 0) aus Hauptspeicher lesen und an DR übergeben
4. Phase EXECUTE (Befehl ausführen)

Die ALU des Rechenwerks führt die durch den Befehl vorgegebene arithmetische oder logische Operation aus. Bei einem Sprungbefehl wird ggf. der in der ersten Phase vorsorglich schon erhöhte Programmzähler auf einen neuen Wert gesetzt. In unserem Beispiel wird der Wert 0 vom Akku um 1 erhöht.

  1. Inhalt von DR (Wert 0) an Akku senden
  2. Signal "Akku um 1 erhöhen" von Steuerwerk an ALU senden
  3. ALU führt Erhöhung durch und hinterlässt den Wert 1 im Akku
5. Phase WRITE BACK (Ergebnis in den Speicher zurückschreiben)

Wenn durch den Befehl der Wert in einer Speicherzelle neu berechnet wurde, wird das Ergebnis der Berechnung in diese Zelle zurückgeschrieben. Im Beispiel wird der Wert 1 in die Speicherzelle 4 geschrieben und damit der alte Wert 0 überschrieben.

  1. Inhalt von BR-Adressteil (Adresse 4) an AR senden
  2. Inhalt von Akku (Wert 1) an DR senden
  3. Signal "Schreiben" von Steuerwerk an Speicherwerk senden
  4. Inhalt von DR (Wert 1) in Zelle Nr. 4 des Hauptspeichers schreiben

Ergebnis des ersten Durchlaufs: In der Speicherzelle 4 steht jetzt der Wert 1 und der Programmzähler zeigt auf die Zelle mit der Adresse 2, in der der nächste Programmbefehl steht. Mit diesem beginnt der Von-Neumann-Zyklus nun wieder von vorne - so lange, bis der Stop-Befehl erreicht und ausgeführt wird.

1. Aufgabe
Beschreibe für den Maschinenbefehl jmp 1 die Mikroprogrammschritte der 4. Phase des Von-Neumann-Zyklus analog zum Beispiel oben. Warum entfallen hier die 3. und die 5. Phase?

Nach der 1. Phase (Befehl holen) steht im Befehlsregister BR der Befehl jmp 1.

In der 4. Phase (Befehl ausführen) muss nur ein einziger Mikroprogrammschritt ausgeführt werden, nämlich:
  Inhalt von BR-Adressteil (Adresse 1) an PZ senden

Die 3. und die 5. Phase entfallen hier, weil die Adresse 1 eine Sprungadresse ist und nicht die Adresse eines Operanden, also eines Datenwertes, der aus dem Hauptspeicher gelesen oder dorthin zurückgeschrieben werden muss.

2. Aufgabe
Beschreibe für den Maschinenbefehl 1: isz 6 mit 6: 0 die Mikroprogrammschritte der 3. und 4. Phase des Von-Neumann-Zyklus. Warum entfällt hier die 5. Phase?

Die Adresse 6 ist hier die Adresse eines Operanden. Dieser muss zwar aus dem Hauptspeicher gelesen werden, um feststellen zu können, ob er den Wert 0 besitzt. Er muss aber nicht verändert und damit auch nicht in den Hauptspeicher zurückgeschrieben werden. Daher ist hier zwar die Phase 3 notwendig, aber nicht die Phase 5. In Phase 1 wurde standardmäßig der PZ schon vorsorglich von 1 auf 2 erhöht. Er muss nun also noch einmal um 1 erhöht werden, weil an der Adresse 6 der Wert 0 steht.

3. Phase (Operand holen)

  1. Inhalt von BR-Adressteil (Adresse 6) an Adressregister AR senden
  2. Signal "Lesen" von Steuerwerk an Speicherwerk senden
  3. Inhalt von Speicherstelle 6 (Wert 0) aus Hauptspeicher lesen und an DR übergeben

4. Phase (Befehl ausführen)

  1. Inhalt von DR (Wert 0) an Akku senden
  2. Signal "Akku auf 0 prüfen" von Steuerwerk an ALU senden
  3. ALU setzt das Zero-Flag - hier auf den Wert 1
  4. Inhalt von PZ (Adresswert 2) an Akku senden
  5. Signal "Akku um Zero-Flag erhöhen" von Steuerwerk an ALU senden
  6. ALU erhöht Akku von 2 auf 3
  7. Inhalt von Akku (Wert 3) an PZ senden