Theorie
 
 
 
 
 
Computertechnik

 
 
 
 

Der Computer

 
 

.. ein Programmlauf

 
 

 
 
 
 


Das Betriebssystem möge das Programm von einem Massendatenträger in den RAM-Hauptspeicher übertragen und dort mit der Speicherzelle 00000h beginnend abgelegt haben1). Das Betriebssystem startet dieses Programm, indem es den Befehlszeiger auf 00000h setzt. Nun erwartet die CU mit dem nächsten Taktschlag einen neuen Befehl ...

MOV DX, 0604h
... Sie verbindet den Datenbus mit ihrem Befehlsregister, setzt das MEMRD-Signal, denn sie will lesen und gibt die Adresse im Befehlszeiger aus. .. Durch die anstehenden Signale wird die Speicherzelle 00000h eingeschaltet und sie legt ihren Ausgang an den Datenbus. Ihre Daten erreichen unmittelbar das Befehlsregister. Mit dem nun folgenden Takt sind die Daten im Befehlsregister gespeichert. Die CPU kennt ihren neuen Befehl, oder besser die Stelle im Diodenprogramm ihrer Mikroprogrammierung, bei der die Ablaufsteuerung des Befehls beginnt. Diese erhöht zunächste den Befehlszeiger um den Wert 1, so dass sein Wert nun 00001h lautet.

Die Ablaufsteuerung erkennt weiterhin, dass zur Ausführung des Befehls zwei weitere Bytes gelesen werden müssen und das diese im DX-Register abgelegt werden sollen. Dementsprechend richtet sie den Datenbus auf das DX-Register, gibt den Befehlszeiger auf den Adressbus aus, und setzt das Lesesignal MEMRD erneut.
Speicherzelle 00001h reagiert wie bereits oben beschrieben und mit dem folgenden Taktschlag wird der Datenbusinhalt 06h im High Byte des DX-Registers eingespeichert.
Die Programmsteuerung ist des zufrieden, erhöht den Befehlszeiger und in gleicher Weise wie bei dem HighByte, wird nun das LowByte für das DX-Register aus der Speicherzelle 0002h übertragen.

Nach dieser Aktion besitzt der Befehlszeiger den Wert 00003h, und die Befehlssteuerung in der Diodenmatrix für den Befehl MOV DX, ... ist an ihrem Ende angelangt.
Der CU dürstet nach einem neuen Befehl. ...





Zeile |Maschinencode   | Assemblersprache
      |Adr   |Daten:   | Label |Bef | Parameter    ; Kommentar
-----------------------------------------------------------------
  1    00000  BA 06 04 | main:  MOV  DX, 0604h     ; Eingabetor
  2    00003  EC       |        IN   AL, DX        ; .. lesen
  3    00004  34 0F    |        XOR  AL, 0Fh       ; XOR-Maske  
  4    00006  BA 06 05 |        MOV  DX, 0605h     ; Ausgabetor
  5    00009  EE       |        OUT  DX, AL        ; .. schreiben
  6    0000A  EB F4    |        JMP  main          ; Sprung










IN AL, DX
... Wieder verbindet die CU ihr Befehlsregister mit dem Datenbus. Sie gibt den Befehlszeiger zum Adressbus aus und setzt das Lesesignal MEMRD. Die Speicherzelle 00003h reagiert, indem sie ihren Inhalt ECh auf den Datenbus ausgibt, der erreicht das Befehlsregister, und wird mit dem folgenden Takt dort gespeichert. Der Maschinenbefehl ECh weist auf eine neue Stelle in der Diodenablaufsteuerung.
Diese erhöht zunächst den Befehlszeiger, so dass dieser den Wert 00004h annimmt. Allerdings wird sein Wert bei der nächsten Adressausgabe nicht verwendet. Vielmehr schaltet die Ablaufsteuerung das DX-Register an den Adressbus und dessen Inhalt ist die Zahl 0604h. Zudem setzt sie auch nicht das MEMRD, sondern das IORD-Signal und zuletzt schaltet sie das AL-Register an den Datenbus. Durch die Adresse 0604h auf dem Adressbus und das IORD-Signal wird eine Speicherzelle des IO-Speichers aktiv. Diese Speicherzelle ist ein Eingabetor, das seine Werte von aussen angeschlossenen Schaltern erhält. Diese Schaltersignale erreichen über den Datenbus das AL-Register der CPU und werden mit dem nächsten Taktschlag dort eingespeichert. Das Eingabetor wurde gelesen .. und da mit diesem Befehl unveränderbar die beiden Register AL und DX verbunden sind, benötigte die Ablaufsteuerung nur das Befehlsbyte ohne weitere Parameter.






So wie an den zwei obigen Maschinenbefehlen geschildert, setzt die CU auch mit den anderen Maschinenbefehlen ihre Arbeit fort ..






  • die CU legt das Befehlsregister an den Datenbus
  • die CU setzt das Lesesignal MEMRD
  • die CU gibt den Befehlszeiger auf dem Adressbus aus
  • die CU liest mit dem nächsten Takt das Befehlsbyte auf dem Datenbus, in das Befehlsregister ein
  • die CU erhöht den Befehlszähler um 1
    • die weitere Aktionen sind von der Befehlsablaufsteuerung abhängig, die in einer Diodenmatrix durch das Befehlsregister ausgewählt wird. Diese benutzt einige Prozessorregister wie das DX-Register im Beispiel, um ihrerseits und unabhängig vom Befehlszeiger auf den Haupt- oder IO-Speicher lesend oder schreibend zuzugreifen. Der Ablauf gleicht dem des Befehlszählers ..

    • es wird ein Arbeitsregister an den Datenbus gelegt

    • es wird das Lese- oder Schreibsignal des gewünschten Speichers gesetzt (MEMRD / MEMWR) oder (IORD / IOWR)

    • es wird die Adresse aus DX oder einem der anderen Adressregister ausgegeben

    • mit dem nächsten Takt werden die Daten des Datenbus in das Arbeitsregister eingespeichert.

  • die CU kontrolliert ob eines der Interruptsignale aktiviert wurde 2)

  • die CU beginnt den geschilderten Ablauf erneut ---------------------^






Die Programmverzweigung JMP main
Bei den Programmverzweigungen unterscheidet man zwischen absoluten und relativen Sprüngen. Bei den absoluten Sprüngen folgt dem Sprungbefehl die konkrete Adresse. Diese wird von der CU im Befehlszeiger eingesetzt, so dass dieser auf eine andere Region des Hauptspeichers zeigt. Mit dem nächsten Befehlszyklus werden also Speicherzellen an einem anderen Ort des Hauptspeichers gelesen.
Ähnlich verhält es sich mit den relativen Sprüngen. Allerdings wird hier von der aktuellen Position des Befehlszählers ausgegangen. Die Adressangabe im Sprungbefehl (siehe oben bei JMP main) gibt nur einen Versatz an. Dieser beträgt bei JMP main (EB-Befehl) (F4-Versatz) -12, denn interpretiert man F4 als vorzeichenbehaftete Zahl ergibt sich -12. Von dem aktuellen Ihnalt des Befehlszeigers 0000Ch = 12 muss also 12 abgezogen werden. In der Tat ergibt 0000Ch + F4h = 00000h. Diese Addition erledigt die CU speichert den Wert 00000h im Befehlszeiger ab .. womit der nächste Befehl der erste Befehl des Programms ist. Die Schleife ist geschlossen.









1) Das ist bei ® intel 80186 CPUs sicher nicht der Fall, denn die Speicher 0-1023 haben hier eine besondere Aufgabe. Hier befinden sich die Software-Interruptvektoren der CPU. Im Beispiel möge es aber so sein.


 

 

 


2) Dieser Vorgang wurde bei der Beschreibung der beiden Beispielen nicht berücksichtigt. Es ist aber tatsächlich so, dass nach jedem vollständig abgearbeiteten Maschinenbefehl die Interrupleitungen geprüft werden. Wird ein Interrupt erkannt, so speichert die CU die momentane Adresse des Adresszeigers auf dem Stack und startet das, dem jeweiligen Interrupt zugeordnete Programm.








www..de