|
Adressierungsarten
Der Befehl muss zwei Angaben enthalten (v. Neumann-Rechner):
- durchzuführende Operation (Was!) Operations-Code
- verwendeter Operand (Womit!) Adresse
Bisher wurde davon ausgegangen, daß bei der Adressangabe eine bestimmte Speicheradresse angesprochen wird, in welcher der gewünschte Operand zu finden ist. Häufig enthält der Adressteil nur eine Teil-Information, mit deren Hilfe sich die tatsächliche, die effektive Adresse, ermitteln läßt Adressmodifikation. Die Adresse muss sich nicht unbedingt auf den Arbeitsspeicher beziehen, sie kann sich auch auf ein Register (Zwischenspeicher in der CPU) oder das E/A-Werk (Memory Mapped I/O) beziehen. Weiterhin ist eine verkürzte Adressangabe möglich kürzere Befehle. Die Adresse kann während des Programmablaufs in Abhängigkeit von gewissen Bedingungen verändert werden ( flexible und effektive Programmierung. Vor allem bei CPUs mit größeren Wortbreiten enthält der Befehl einen eigenen Modifikatorteil (dem Adressteil zugeordnet). Bei kleineren Rechnern mit Einadreß-Befehlen (z.B. 8-Bit-Mikrocomputern) wird dagegen häufig (nicht immer) kein Modifikatorteil verwendet, sondern die Adressmodifikation implizit durch den OP-Code gegeben OP-Code legt Operation und Adressierungsart fest. Im Folgenden werden die wesentlichen Adressierungsarten vorgestellt. Die Bezeichnung durch die einzelnen Hersteller ist nicht einheitlich. Auch nicht jede CPU besitzt alle
Adressierungsarten und häufig sind nicht alle
Adressierungsarten mit jedem Befehl oder jedem Register
möglich.
Programmiermodell
Bedingt durch die komplexe Struktur der Hardware einer CPU
betrachtet man bei der Programmierung nicht mehr den realen Aufbau
aus Leitwerk, Rechenwerk, E/A-Werk und Speicher. Die CPU wird nur
noch als Programmiermodell betrachtet, das aus den "von
außen sichtbaren" Teilen von Leit- und Rechenwerk, der
Registerstruktur und der Befehlsliste besteht. Speicher und
E/A-Werk werden auf die gleiche Weise betrachtet (z.B.
Programmiermodell für komplexe E/A-Bausteine).
Absolute Adressierung
Der Adressteil (AD) des Befehls stellt die effektive Adresse
(EA) dar. Die EA enthält den Operanden des Befehls, sie kann
Speicher- oder Registeradresse sein.
- Speicheradresse: In manchen Rechnern existieren
zwei Formen, die sich durch die Länge des Adressteils
unterscheiden:
- vollständig absolut(6009: Extended, Ext. Direct,
68000: Absolute Long): Der Adressteil kann den vollen Adressraum
beschreiben (bei 8-Bit-µP 2 Byte: (OP-Code, Adr.-MSB, Adr.-LSB).
- abgekürzt absolut(6809: Direct, 68000: Absolute
Short): Der Adressteil kann nur einem eingeschränkten
Adressraum beschreiben (meist bei Sprungbefehlen).
- Registeradresse: Da in der Regel nur wenige
adressierbare Register vorhanden sind, "kurze" Angabe.
Seitenbezogene Adressierung
Der Speicher wird in einzelne Seiten (Pages) eingeteilt. Die EA
setzt sich aus zwei Teilen zusammen:
- p höherwertige Stellen: Seitenadresse (SA)
- w niederwertige Stellen: Wortadresse (WA)
Durch den Adressteil des Befehls wird nur die Wortadresse
festgelegt (AD kann daher kurz sein). Die Seitenadresse kann:
- in speziellen Registern stehen (Direct Page Reg. bei 6809)
- den höherwertigen Stellen des Befehlszählers entnommen werden
Vorteil:
Trotz verkürzter Adressangaben kann der gesamte Adressraum
erreicht werden. Adressbestimmung schnell (ohne Addition), solange
die aktuelle Seite nicht verlassen wird.
Anwendungen:
- Verkürzung der erforderlichen Adressangabe (Speicherzugriffe!)
- gemeinsame Behandlung von Speicherinhalten in Blöcken (Felder!)
- Zugriff-Schutz
Indizierte Adressierung
Die EA wird durch Addition einer Distanz D zum Inhalt eines
Bezugsregisters (Adreßregister, Indexregister, etc.) ermittelt.
Die Distanz (Offset, Displacement) kann sein:
- Adressteil des Befehls
- Der Inhalt eines durch den Adressteil spezifizierten Registers
- Die Summe eines Registers und des Befehls-Adressteils
- keine Distanz (D=0)
- Als Register kann auch der Befehlszähler verwendet werden
- positiv und negativ
Die indizierte Adressierung wird nach verwendetem Bezugsregister
und Ermittlung der Distanz unterschieden:
- Adressierung über spezielle Indexregister (Indexed Addressing)
erfolgt über ein spezielles Indexregister (6800),
mehrere Indexregister (6809) oder ein/mehrere Universalregister
(68000). Anwendungen:
- Bearbeitung von Datenblöcken (Felder, Strings) durch
Incrementierung/ Decrementierung des Indexregisters (bei manchen
Mikrocomputern automatische Veränderung des Indexregisters)
- Implementierung von Schleifen bei der Übersetzung von
höheren Programmiersprachen
- (Befehlszähler-) Relative Adressierung (PC Relative Addressing)
Der Befehlszähler ist Bezugsregister. Vorteil: Programm im
Speicher frei verschieblich.
- Basis- (Distanz-) Adressierung
Ein Basisregister ist Bezugsregister. Häufig sind mehrere
Basisregister vorhanden (IBM 360: 16 Basisregister); in diesem Fall
muss das gewünschte BR angegeben werden. Die Programme sind so
geschrieben, dass alle Adressangaben relativ zum Programmanfang
(Adr. 0) erfolgen. Die aktuelle Anfangsadresse steht dann im
Basisregister. Beim Laden des Progr. erhält das Basisregister
einen konstanten Inhalt (Progr.-Startadresse) zugewiesen.
Indirekte Adressierung
Alle Adressierungsarten, bei denen die Adressierung über
zwei oder mehr Referenzstufen erfolgt Zum Lesen/Schreiben
des tatsächlichen Operanden sind zwei
oder mehr Speicherzugriffe erforderlich. Im Befehl wird nicht der
Operand direkt adressiert, sondern die Speicherzelle, in der sich
die Adresse des Operanden befindet. In Mikrocomputer meist nur
Adressierung über zwei Referenzstufen, bei Großrechnern oft
mehr als zwei Stufen.
Die indirekte Adressierung kann mit den o. g. Adressierungsarten
kombiniert werden, sofern der Aufbau der CPU dies zulässt.
- Universell verwendbare Programme oder Unterprogramme UP
als Parameter. Die effektive Adresse muss bei der
Programmierung nicht bekannt sein (indirekt-absolute A.), es
genügt ein einziger Einsprungspunkt und eine Funktionsnummer.
- Bearbeiten von Datenblöcken mit unterschiedlicher
Länge und beliebiger Lage im Speicher (indirekt indizierte A.).
- Zugriff auf Speicherplätze, die außerhalb eines
eingeschränkten Speicherbereichs liegen (bei Rechnern, die nur
abgekürzt-absolute Adressierung kennen, z.B. PDP-8) oder die
außerhalb der aktuellen Seite liegen (seitenbezogene
Adressierung).
Unmittelbare Adressierung (Immediate Addressing)
Der Adressteil stellt unmittelbar den Operanden dar (der Operand
folgt unmittelbar dem OP-Code). Der Wert des Operanden wird bereits
zum Zeitpunkt der Programmierung festgelegt und kann zusammen mit
dem Programm gespeichert werden.
- Konstanten-Adressierung OPRD = AD
- unmittelbare Adressierung OPRD = (PC+1)
Implizite Adressierung (Inherent Addressing)
Alle Adressangaben sind implizit im OP-Code enthalten (meist
Register). Zusätzliche Adressangabe nicht erforderlich, z.B.
"Setze Akkumulator auf Null".
|
|
|