Der Registersatz des 8086-Prozessoors
Der Mikroprozessor besitzt eine Reihe von Registern, in denen der Entwickler Daten oder Zwischenergebnisse
ablegen kann. Beim 8086-Prozessor gibt es neben den allgemeinen Registern zudem noch Segmentregister, die zur Bildung
von vollständigen Adressen benötigt werden.
Der Assemblerprogrammierer kann einen Prozessor als einen Satz von Registern ansehen, deren Inhalte sich
mit dem Befehlsvorat auf ganz unterschiedliche Weise modifizieren lässt. In den Registern übergibt der Entwickler zum Beispiel die
Operanden für arithmetische Operationen, oder er speichert temporäre Ergebnisse. Die Register sind sozusagen die Variablen.
Der 8086 kennt Daten-, Zeiger-/Index-, Segment- und Kontrollregister.
Die 14 Register des 8086 lassen sich in allgemeine Register und in Register für besondere Aufgaben unterteilen. Eine
weitergehende Unterteilung kennt Datenregister, Zeiger- und Indexregister, Segment- und Kontrollregister.
Als allgemeine oder Datenregister gelten AX, BX, CX und DX, die jeweils 16 Bit breit sind. Dabei lässt sich die obere Hälfte
(das höherwertige Byte) und die untere Hälfte (das niederwertige Byte) auch einzeln ansprechen. So teilt sich das AX-Register
(Akkumulator) in die 8-Bit-Register AL (niederwertiges Byte) und AH (höherwertiges Byte). Die Datenregister können der als 8-Bit-
oder als 16-Bit-Regtster verwendet werden. Die Vorteile dieser Registeraufspaltung findet sich bei ASCII-Zeichen oder an Zahlen
kleiner als 256. Die Register können fast frei verwendet werden. Der Loop-Befehl für Schleifen, erwartet das-CX-Register als Zähler.
Das AX-Register wird meist für den Austausch beliebiger Daten zwischen verschiedenen Registern und Speicherzellen, das BX-Register
als Basisregister (Base Register) bei der Adressierung von Speicherzellen, das DX-Register (Data Register) für allgemeine Daten.
Das DX-Register hat nur einen speziellen Verwendungszweck. Es enthält die Nummer des Ein-/Ausgabekanals bei entsprechenden
Port-Instruktionen.
|
AX |
Akkumulator |
AH |
| |
AL |
BX |
Basis |
BH |
| |
BL |
CX |
Zähler |
CH |
| |
CL |
DX |
Daten |
DH |
| |
DL |
Die Gruppe der Zeiger- und Indexregister besteht aus vier 16 Bit breiten Registern:
dem Basiszeiger BP (Base Pointer), dem Stapelzeiger SP (Stack Pointer), dem
Quellindexregister SI (Source Index) und dem Zielindexregister DI (Destination Index).
SP |
Stapelzeiger |
BP |
Basizeiger |
SI |
Quellindex |
DI |
Zielindex |
Die vier Segmentregister CS (Code Segment), DS (Data Segment), ES (Extra Segment)
und SS (Stack Segment) sind notwendig, um Speicheradressierung beim 8086 zu verwalten.
Um einen l MByte großen Adreßraum anzusprechen, sind 20 Adreßleitungen notwendig,
die für die Adressierung der Speicherzellen zuständigen Register sind aber nur 16 Bit
breit. Daher wird eine 20-Bit-Adresse in Segment und Offset aufgeteilt.
Der Offset stellt dabei die untere Hälfte der Adresse dar und entstammt dem jeweiligen
16-Bit-Register. Dazu wird der Inhalt eines der vier Segmentregister als Segment addiert,
nachdem es mit 16 multipliziert worden ist.
CS |
Codesegment |
DS |
Datensegment |
SS |
Stapelsegment |
ES |
Extrasegment |
Die Kontrollregister des 8086 enthalten den IP (Instuction Pointer) und das Statusregister
PSW(Processor Status Word). Der Befehlszeiger IP enthält die Adresse des nächsten auszuführenden
Befehls, der immer im Zusammenhang mit dem Segmentregister CS gebraucht wird. Das Register IP
kann nicht als allgemein verwendbares Register benutzt werden.
Das Statusregister (oder Flagregister) ist eine Sammlung von einzelnen
Statusindikatoren. Dabei dienen sechs Bit dazu, den Zustand der letzten arithmetischen Operation
anzuzeigen. Die übrigen Bits des Statusregisters können vom Programmierer durch
entsprechende Assembleranweisungen gezielt gesetzt oder gelöscht werden. Über sie lässt sich etwa die
Behandlung von Interrups unterbinden, ein spezieller Einzelschrittmodus zum Testen von Programmen
einschalten oder die Richtung bei Zeichenkettenoperationen festlegen.
Statusbits |
Flags |
15 |
- |
- |
14 |
- |
- |
13 |
- |
- |
12 |
- |
- |
11 |
OF |
Overflow Flag |
10 |
DF |
Direction Flag |
09 |
IF |
Interrupt-Enable Flag |
08 |
TF |
Trap Flag |
07 |
SF |
Sign Flag |
06 |
ZF |
Zero Flag |
05 |
- |
- |
04 |
AF |
AL-Carry Flag |
03 |
- |
- |
02 |
PF |
Parity Flag |
01 |
- |
- |
00 |
CF |
Carry Flag |
|