Stand: 2004-03
Thomas Mertin
Netzwerk- und Elektrotechnik
D-41334 Nettetal
Prozessortypen:
|
8086 |
8088 |
80286 |
Datenbus |
16 Bit |
8 Bit |
16 Bit |
Adreßbus |
20 Bit |
20 Bit |
24 Bit |
Bemerkung |
Multiprozessorfähig |
XT, DOS Einsatz |
AT, Multitaskingfähig, Protected Mode |
Pin |
Signal |
Funktion |
Ein-/Ausgang |
16...2, 39 |
AD0...AD15 |
Adreß- und Datenbus |
Zweiweg, Tristate |
38, 37 |
A16/S3, A17/S4 |
Adresse und Segment |
Output, Tristate |
36 |
A18/S5 |
Adresse und Interruptfreigabe |
Output, Tristate |
35 |
A19/S6 |
Adresse und Status |
Output, Tristate |
34 |
/S7 |
Speicherblock und Status |
Output, Tristate |
32 |
|
Lesesignal |
Output, Tristate |
22 |
READY |
WAIT-Anforderung |
Input |
23 |
|
Abfrage |
Input |
18 |
INTR |
Interruptanforderung |
Input |
17 |
NMI |
Interruptanforderung |
Input |
21 |
RESET |
Reset |
Input |
19 |
CLK |
Clock |
Input |
+) |
MN/ |
0 Volt |
|
+) |
|
Status |
Output, Tristate |
+) |
|
Buszugriff |
Zweiweg, Tristate |
+) |
QS0, QS1 |
Warteschlange |
Output |
+) |
|
Buszugriff |
Output, Tristate |
33 |
MN/ |
+5 Volt |
|
28 |
M/ |
Speicherzugriff / Ein-/Ausgabe |
Output, Tristate |
29 |
|
Schreibsignal |
Output, Tristate |
25 |
ALE |
Address Latch Enable |
Output |
27 |
DT/ |
Data Transmit / Receive |
Output, Tristate |
26 |
|
Data Enable |
Output, Tristate |
24 |
|
Interrupt Acknowledge |
Output, Tristate |
31 |
HOLD |
HOLD-Anforderung |
Input |
30 |
HLDA |
Hold Acknowledge |
Output |
40, 20/1 |
Vcc, GND |
+5 Volt, 0V |
Output, Tristate |
+) Signale im Maximum Mode
AD0...AD15: 16-Bit gemultiplexter Adreß-/ Datenbus
ALE: Adress Latch Enable
A16...A19: 20-Bit Adreßbus
,
,
M/:
Steuersignale
HOLD, HLDA: wie 8085 (DMA-Betrieb)
CLK: wie 8085 (wird angesteuert vom Taktgenerator 8284)
RESET: wie 8085 (Startadresse: FFFF0H)
READY: wie 8085 (Wait-State, Wartezyklen für langsamen RAM)
INTR,
:
ähnlich 8085
NMI: Non Maskable Interrupt (entspricht TRAP beim 8085)
Neue Pins
:
Nur bei Multiprozessorbetrieb
:
Data Enable, Freigabe für Datenbustreiber
DT/:
Data Transmit / Receive, Umschaltung der Datenrichtung
MN/:
Minimum / Maximum Mode
:
Bus High Enable
Dieses Signal wird Low, wenn ein Zugriff über die Datenleitungen D8 bis D15 erfolgt (High Byte); steuert den Zugriff auf den Speicher und auf Ein- und Ausgabeeinheiten. Es wird beschaltet wie ein zusätzliche Adreßleitung.
Funktionsblockschaltbild |
Queue = "Warteschlange" für nächste Befehle
Pipeline = "parallel" Abarbeitung von Befehlen (je Befehl 1 Taktzyklus)
Der 8086 verfügt über vier 16 Bit breite Hauptregister, zwei 16 Bit Zeigerregister, zwei 16 Bit Indexregister, einen 16 Bit Programmzähler, vier 16 Bit Segmentregister und ein 16 Bit Statusregister. Diese dem Programmierer zugängliche Teile des inneren Aufbaus lassen sich durch das folgende Schema weitergeben:
8085 |
8 Bit |
8 Bit |
16 Bit |
A |
AH |
AL |
AX |
H, L |
BH |
BL |
BX |
B, C |
CH |
CL |
CX |
D, E |
DH |
DL |
DX |
SP |
SP |
Stapelzeiger |
|
BP |
Base-Pointer |
|
|
|
|
SI |
Source Index |
|
DI |
Destination Index |
|
|
|
PC |
PC |
Programmzähler |
|
|
|
|
CS |
Codesegmentregister |
|
DS |
Datensegmentregister |
|
SS |
Stapelsegmentregister |
|
ES |
Extrasegmentregister |
|
|
|
|
PSW |
Statusregister |
Zuweisung: MOV AX,1234 = MOV AL,34; MOV AH,12
direkte Adressierung: MOV AL,[0200]
8-Bit, indirekt: MOV AL,[BX]
16-Bit, indirekt: MOV AX, [BX]
16 Bit |
8 Bit |
8 Bit |
AX |
AH |
AL |
BX |
BH |
BL |
CX |
CH |
CL |
DX |
DH |
DL |
Durch diese Aufteilung lassen sich 8-Bit Operationen mit 8-Bit Operanden durchführen, ohne daß auf die 16-Bit Arithmetik zurückgegriffen werden muß. Der Vorteil besteht darin, daß 8-Bit Operationen in der Regel weniger Zeit benötigen und daß Speicherplätze eingespart werden. Soll z.B. ein Zähler von 200 bis 0 abwärts gezählt werden, dann genügt für den Vorgang ein 8-Bit Register.
Das AX-Register dient vorwiegend als Akkumulator. Es hat folgende besonderen Eigenschaften:
Das BX-Register fungiert u.a. als Basis-Adressregister, d.h. sein Inhalt wird u.a. bei der Bildung von Speicheradressen verwendet.
Das CX-Register wird u.a. auch als Zählerregister verwendet. Der Inhalt dieses Registers wird bei der Ausführung von Stringbefehlen, die wiederholt werden, und bei Verschiebeoperationen um mehr als eine Bitposition abwärts gezählt.
Das DX-Register enthält bei einigen Ein- und Ausgabeoperationen die Adresse des jeweiligen Ein-/Ausgabekanals. Diese Funktion kann kein anderes Register übernehmen. Die zweite Sonderaufgabe des DX-Registers besteht in der Aufnahme von Operanden und Ergebnisse bei Multiplikationen und Divisionen.
Über die Zeigerregister SP und BP werden die Speicherplätze im Stapelsegment adressiert. SP steht für Stack Pointer, BP steht für Base Pointer. Außerdem können in ihnen Operanden für 16-Bit breite arithmetische und logische Operationen gespeichert werden.
Das SP-Register, der Stapelzeiger, ermöglicht im Speicher den Aufbau eines Stapels. Die Adressierung der Speicherplätze, welche den Stapel enthalten, erfolgt durch das SP-Register in Verbindung mit dem SS-Register.
Das BP-Register erlaubt den Zugriff zu Daten im Stapelsegment, typischerweise zu Parametern, die über den Stapel weitergegeben werden. Der Inhalt des BP-Registers wird typischerweise ebenfalls mit dem Inhalt des SS-Registers kombiniert.
Über die Indexregister SI und DI werden typischerweise Speicherplätze adressiert, welche Stringelemente enthalten. SI steht für Source Index, DI steht für Destination Index. Außerdem können in den Indexregistern wie den Zeigerregistern Operanden für 16-Bit breite arithmetische und logische Operationen gespeichert werden.
Der Programmzähler enthält immer die Adresse desjenigen Befehls im durch das CS-Register definierten Codesegment, der als nächster ausgeführt wird. PC steht für Program Counter (auch der Begriff Instruction Pointer ist geläufig):
Bei der Berechnung einer Speicheradresse wird, außer bei der Adressierung von Interruptvektoren, der Inhalt eines der vier Segmentregister einbezogen. Jedes Segmentregister definiert im Speicher des 8086 einen 64k-Bereich.
CS ist die Abkürzung für Codesegment. Vor dem Einlesen eines Befehls wird der Inhalt des CS-Registers mit dem Inhalt des Programmzählers kombiniert um die Adresse des Speicherplatzes, welcher den Befehl enthält, zu ermitteln.
DS steht als Abkürzung für Datensegment. Mit wenigen Ausnahmen werden alle Operanden relativ zum Inhalt dieses Registers adressiert. Die Ausnahmen sind:
SS ist die Abkürzung für Stack Segment. In allen Operationen, welche Adressen unter Verwendung des Inhaltes des SP-Registers oder des BP-Registers bilden, wird bei der Bildung des absoluten Adresse der Inhalt des SS-Registers verwendet. Deshalb werden alle stapelorientierten Befehle PUSH, POP, CALL, RET und INT in Verbindung mit dem SS-Register ausgeführt.
ES ist die Abkürzung für Extra Segment. Gewisse Stringbefehle verwenden bei der Berechnung der Operandenadresse den Inhalt des DI-Registers. Die so berechneten Adressen werden relativ zum Inhalt des ES-Registers verwendet.
Typischerweise beinhaltet die Ausführung eines bestimmten Befehls die Einbeziehung eines bestimmten Segment Registers. Doch gibt es ein Verfahren, das es ermöglicht, diese Regel in vielen Fällen außer Kraft zu setzen.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Bit Nr. |
|
|
|
|
O |
D |
I |
T |
S |
Z |
|
A |
|
P |
|
C |
Statusregister |
O = Overflow (Überlauf)
D = Direction (D-Status)
I = Interrupt (I-Status)
T = Trap (T-Status)
S = Sign (Vorzeichen)
Z = Zero (Null)
A = Auxiliary Carry (Hilfsübertrag
P = Parity (Parität)
C = Carry (Übertrag)
Die Statusbit für Null, Übertrag, Hilfsübertrag, Überlauf und Vorzeichen funktionieren wie allgemein üblich:
Das Übertragstatusbit C zeigt einen Übertrag aus dem höchstwertigen Bit nach arithmetischen Operationen an. Außerdem wird sein Wert durch einige Verschiebebefehle verändert. Das Überlaufstatusbit O verknüpft nach arithmetischen Operationen Überträge aus den höchstwertigen Bit durch exklusives ODER. Es zeigt an, daß bei arithmetischen Operationen, welche die Vorzeichen der Operanden berücksichtigen, dem Betrage nach zu große Zahlen verwendet wurden.
Das Vorzeichenstatusbit S gibt nach arithmetischen Operationen das Vorzeichen an, d.h. den Wert des höchstwertigen Bit. Unter der Annahme, daß eine die Vorzeichen berücksichtigende arithmetische Operation ausgeführt wurde, bedeutet 0 ein positives und 1 ein negatives Resultat.
Das Hilfsübertragstatusbit A zeigt einen Übertrag aus Bit 3 an nach 8 Bit breiten Operationen.
Subtraktionen werden in Zweierkomplement Arithmetik ausgeführt. Die Bedeutung des Übertragstatusbit wird dabei invertiert. D.h., nach einer Subtraktion enthält das Übertragstatusbit den Wert 1, wenn kein Übertrag aus den höchstwertigen Bit erfolgte, und den Wert 0, wenn ein Übertrag aus dem höchstwertigen Bit erfolgte. In diesem Fall signalisiert eine 1 also, daß geborgt wurde.
Das Paritätstatusbit P wird auf 1 gesetzt, wenn als Ergebnis irgendeiner Operation die acht niederwertigen Binärstellen durch eine gerade Zahl von Einsen besetzt sind. Eine ungerade Zahl von Einsen bewirkt, daß das Paritätstatusbit auf 0 gesetzt wird..
Das Nullstatusbit Z wird auf 1 gesetzt, wenn das Ergebnis einer Operation der Zahlenwert 0 ist. Ist ein Ergebnis ungleich 0, dann wird das Statusbit auf 0 gesetzt.
Der Wert des D-Statusbit bestimmt, ob bei der wiederholten Ausführung von Stringbefehlen die Inhalte des SI-Registers und/oder des DI-Registers automatisch aufwärts oder abwärts gezählt werden. D = 0 bedeutet, daß die Inhalte aufwärts gezählt werden. Die Elemente einer Zeichenkette werden also bei dem Element in dem Speicherplatz mit der niederwertigsten Adresse beginnend verarbeitet. D = 1 bedeutet, daß die Inhalte der Indexregister automatisch abwärts gezählt werden. Das bedeutet, daß die Elemente einer Zeichenkette bei der höchsten Speicheradresse beginnend verarbeitet werden.
Das I-Statusbit stellt einen Schalter für einen Teil der Interruptlogik dar. Damit sperrbare Interrupt akzeptiert werden können, muß sein Wert 1 sein. Hat das Interruptstatusbit den Wert 0, dann werden sperrbare Unterbrechungsanforderungen nicht zugelassen.
Das T-Statusbit wird als Hilfe beim Testen und Korrigieren von Programmen verwendet. Es schaltet sozusagen die Betriebsart "Einzelschrittweise Ausführung" ein.
nach obenBelegung des Slots beim PC (8 Bit)
Signal |
Rückwand |
Signal |
|
0V |
B1 |
A1 |
|
RESET |
B2 |
A2 |
D7 |
+5V |
B3 |
A3 |
D6 |
IRQ2 |
B4 |
A4 |
D5 |
-5V |
B5 |
A5 |
D4 |
DRQ2 |
B6 |
A6 |
D3 |
-12V |
B7 |
A7 |
D2 |
0WS od. Frei |
B8 |
A8 |
D1 |
+12V |
B9 |
A9 |
D0 |
0V |
B10 |
A10 |
I/O-READY |
|
B11 |
A11 |
AEN |
|
B12 |
A12 |
A19 |
|
B13 |
A13 |
A18 |
|
B14 |
A14 |
A17 |
|
B15 |
A15 |
A16 |
DRQ3 |
B16 |
A16 |
A15 |
|
B17 |
A17 |
A14 |
DRQ1 |
B18 |
A18 |
A13 |
|
B19 |
A19 |
A12 |
CLK |
B20 |
A20 |
A11 |
IRQ7 |
B21 |
A21 |
A10 |
IRQ6 |
B22 |
A22 |
A9 |
IRQ5 |
B23 |
A23 |
A8 |
IRQ4 |
B24 |
A24 |
A7 |
IRQ3 |
B25 |
A25 |
A6 |
|
B26 |
A26 |
A5 |
T/C |
B27 |
A27 |
A4 |
ALE |
B28 |
A28 |
A3 |
+5V |
B29 |
A29 |
A2 |
Osc |
B30 |
A30 |
A1 |
0V |
B31 |
A31 |
A0 |
Belegung des Erweiterungs-Slots beim PC (16 Bit)
Signal |
|
Signal |
|
|
D1 |
C1 |
BHE |
|
D2 |
C2 |
A23 |
IRQ10 |
D3 |
C3 |
A22 |
IRQ11 |
D4 |
C4 |
A21 |
IRQ12 |
D5 |
C5 |
A20 |
IRQ15 |
D6 |
C6 |
A19 |
IRQ14 |
D7 |
C7 |
A18 |
|
D8 |
C8 |
A17 |
DRQ0 |
D9 |
C9 |
|
|
D10 |
C10 |
|
DRQ5 |
D11 |
C11 |
D8 |
|
D12 |
C12 |
D99 |
DRQ6 |
D13 |
C13 |
D10 |
|
D14 |
C14 |
D11 |
DRQ7 |
D15 |
C15 |
D12 |
+5V |
D16 |
C16 |
D13 |
Master |
D17 |
C17 |
D14 |
0V |
D18 |
C18 |
D15 |
Speicherbereich
Aufteilung des Speichers (physikalisch)
Zugriffsmöglichkeiten:
Adressbereich |
Für die Port Adressierung werden 16 Adressleitungen verwendet (A0...A15). Verwendet werden nur A9...A9.
Beispiele:
direkte Adressierung:
MOV AL,0D
OUT 00,AL
IN AX,02
indirekte Adressierung (Port Adresse muß immer im DX-Register stehen):
MOV DX,0200
MOV AX,0A0D
OUT DX,AX
MOV DX,0002
IN AX,DX
16-Bit Ausgabeport mit Port-Adresse 0200H und 0201H
|
A15...A12 |
A11...A8 |
A7...A4 |
A3...A0 |
||||||||||||
0200H = |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
x |
16-Bit Eingabeport mit Port-Adresse 0300H und 0301H
|
A15...A12 |
A11...A8 |
A7...A4 |
A3...A0 |
||||||||||||
0300H = |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
x |
nach oben | ||
Seite zurück | Inhalt | Ende |
Startseite |
Nachricht an: webmaster@mertech.de