Technischer Aufbau des Prozessors 8086


Beim 4Bit-System "ERNA" wurde folgender Prozessor genutzt:

    Wir hatten ein Arbeitsregister, den Akku, zur Verfügung. Von hier aus konnten Daten zum Speicher transportiert werden und zurück. Die ALU nutzt das Register als Ergebnisspeicher und zur Speicherung eines Operanden.
In das Befehlsregister werden alle Werte gespeichert, die als Befehl interpretiert werden sollen.
Der Befehlszähler (Register) speichert und bearbeitet die Arbeitsspeicher-Adressen (Befehls- und Datenadressen).
Ein Flag-Register mit nur zwei auswertbaren Flags war ebenfalls vorhanden.
Das Steuerwerk steuert auf Basis des Wertes aus dem Befehlsregister den gesamten Ablauf im Rechner
-
eigentlich schon ganz schön viel, was das kleine System können muss. Und wir konnten damit auch ordentliche Programme bearbeiten.

Der 8086 ist ein wesentlich komplexeres Gebilde, so dass nur noch eine prinzipielle Darstellung möglich ist, aber die, die der Programmierer nutzen kann.

    Als wesentlich neu fällt auf, dass es zwei große Teile im Prozessor gibt:
  • oben, die Bus-Interface-Einheit (BIU)
  • unten, die Ausführungs-Einheit (EU)
Die Organisation für beide übernimmt das eine Steuerwerk. Der Programmierer muss nur wissen, dass damit auch Register für die Adressierung im oberen Teil liegen, die für Daten im unteren. Folgerichtig liegt dort auch die ALU.

Die Trennung in die zwei Bereiche ist sehr nützlich, denn, dadurch das die EU mit einer Reihe weiterer Register ausgestattet ist, kann die ALU völlig autonom nur mit den Registern rechnen.
Da besteht dann nun die Möglichkeit, dass die BIU aus dem Speicher die nächsten Werte holt. Die Frage ist dann aber, wo bleiben die Werte?
Das wird durch eine Warteschlange gelöst. Der Platz1 ist das Befehlsregister, der Wert muss darin stehen bleiben bis der Befehl abgearbeitet wurde, dann wird der Wert verworfen und die Schlange rutscht eine Position weiter, also Inhalt von Platz2 wird nach Platz1 verschoben usw. Es gibt also keine Wartezeiten durch das Holen des Befehls aus dem Speicher.
Es gibt aber auch einen Nachteil, denn war der Befehl ein Sprungbefehl, können alle Werte in der Warteschlange falsch sein. Ab der neuen Adresse müssen nun aber 6 Werte aus dem Speicher geholt werden, bis der erste richtige da ist - da gibt es nun eine längere Wartezeit. In der Weiterentwicklung des 80x86 gibt es weiterhin eine Warteschlange, die kann aber herausfinden, welcher Wert auf Grund der Sprungbefehle geholt werden muss.
Interessant ist, dass ein Adresswerk, ein Art Rechenwerk, vorhanden ist, das erlaubt eine Vielzahl von Adressierungsmöglichkeiten, das müssen wir dann teilweise bei den Beispielen beschreiben.

In der EU sind die Register A bis D die Arbeitsregister. Man kann sie z.B. mit AX als 16Bit Register ansprechen oder auch mit AH (oberer Teil) oder AL (unterer Teil) jeweils als 8Bit Register nutzen.
Die Register funktionieren gleich, aber für bestimmte Befehle werden auch bestimmte Register benötigt, sie sind dann zugeordnet.
Alle anderen Register können nur als 16Bit Register angesprochen werden.

Für den Nutzer ist eigentlich nur wichtig, welche Register genutzt werden können und er muss wissen, ob sie genutzt werden können oder dort wichtige Werte stehen!

Deshalb reicht für die Bearbeitung von Programmen nur der Register-Plan:

    Die Register werden mit der deutschen Bezeichnung beschrieben.
Zusätzlich gibt es auch eine Bezeichnung der Flags im Flagregister. Man findet wieder die 4 aus dem Prozessor ERNA bekannten Flags:
    ZF (Zero-Flag (Null)), SF (Sign-Flag (Vorzeichen)), CF (Carry-Flag (Übertrag)) und das OF (Overflow-Flag (Überlauf)).
Auf Grund der 16 Bit sind nun noch 12 weitere Flags möglich, es sind jedoch nur insgesamt 11.

Mehr Register sind natürlich toll, aber man braucht auch mehr Befehle um das alles bedienen zu können. Nehmen wir nur einmal die 4 Datenregister A bis D:

  • Der Inhalt von jedem Register muss in den Speicher gespeichert und gelesen werden können
    8 Befehle
  • Jedes xL-Teil und xH-Teil muss ebenfalls gespeichert werden könnenund umgekehrt
    16 Befehle
  • Jedes xL-Teil nach xH-Teil und umgekehrt
    8 Befehle
  • Jedes xL-Teil nach jedem anderen 8Bit Teil
    6 Befehle pro Teil mal 2 = 12 Befehle

Dafür sind dann bereits 44 Befehle notwendig. Aber wir haben bisher nur Transportbefehle gezählt, es gibt ja auch noch arithmetische, logische und Flag Auswerte-Befehle und weitere -
man sieht, wir brauchen eine größere Verarbeitungsbreite.
Mit 16Bit besteht aber die Möglichkeit 65536 verschiedene Befehle zu identifizieren, das reicht, das wird nicht im 8086 genutzt.

Damit können wir uns dem nächsten Thema widmen, der
Adressierung von Speicherplätzen

zurück zur Start-Seite   /   weiter Adressierung von Speicherplätzen