next up previous contents
Nächste Seite: Befehlssatz Aufwärts: Allgemeiner Aufbau und Funktion Vorherige Seite: Bussteuerung   Inhalt

Adressierung

Bei einer Von-Neumann-Architektur erfolgt die Ausführung der Programmbefehle in der Reihenfolge, wie die einzelnen Befehle nacheinander im Speicher abgelegt sind. Bei einem solchen linearen Programm ist daher eine explizite Adressenangabe gar nicht erforderlich. Der Befehlszähler des Prozessors enthält nach Ausführung eines Befehls die Adresse des nachfolgend zu lesenden Befehls. Lediglich bei Sprungoperationen sowie beim Aufruf von Unterprogrammen und Interrupt-Serviceroutinen ist eine Adressenangabe notwendig, um das Sprungziel bzw. die Adresse des ersten Befehls des Unterprogramms zu kennzeichnen.

Die vom Befehl zu verarbeitenden Daten (Operanden) können gemeinsam mit dem Operationscode des Befehls gespeichert sein, in der Regel sind sie jedoch getrennt vom Operationscode im Arbeitsspeicher abgelegt. Daher muß der Befehl die Adresse der Operanden sowie gegebenfalls Angaben darüber enthalten, wie die aktuelle Adresse der Operanden (effektive Adresse) bei der Befehlsausführung berechnet werden kann. Bei den einzelnen Mikroprozessortypen sind zahlreiche Adressierarten implementiert, die sich primär auf die Lokalisierung von Daten beziehen, aber auch für die Ermittlung von Adressen für Sprungoperationen nutzbar sind.

Für die Codierung der Adresse im Befehl und für die Bestimmung der effektiven Adresse gibt es eine Reihe von Adressierungsarten, z.B.:

Bei der indirekten Adressierung ist anstelle der Adresse des Operanden, wie bei der direkten Adressierung, die Adresse der Speicherzelle, in der sich die Adresse des Operanden befindet, vorzufinden. Bei der indizierten Adressierung findet eine Adressenverschiebung statt, indem die im Befehl enthaltene Adresse additiv zu einer in einem Register gespeicherten Basisadresse hinzugefügt wird. Bei der relativen Adressierung findet eine indirekte Adressierung in Kombination mit einer indizierten Adressierung, die sich auf die Adresse des Operanden bezieht, statt. Bei der unmittelbaren Adressierung existiert anstelle der Operandenadresse im Befehl eine Konstante, die als Operand gilt.

Befehlsformate Bei Befehlen mit z.B. einem einzigen Operanden muß dessen Adresse als Quelladresse und die Adresse des nach der Befehlsausführung vorliegenden Resultats als Zieladresse angegeben sein. Eine der beiden Adressen kann verdeckt sein, wenn das Resultat in der Speicherzelle des Operanden abgelegt wird und ihn damit überschreibt. Die Adressierung ist ,,implizit``, wenn bereits aus dem Operationscode die Quell- und Zieladresse bestimmt sind, z.B. bei Operationen mit dem Inhalt des Akkumulators.

Die Datenformate des Mikroprozessors unterscheiden sich in der jeweils festgelegten Länge der Bitkette, während eine Kennzeichnung des Datentyps nicht erfolgt (siehe Kapitel 5). Das Datenformat wird eindeutig durch Operationscode und Adressierungsart bestimmt. Die getrennt vom Rechnerprogramm gespeicherten Daten werden meist als Einheiten mit einfacher oder doppelter Wortlänge gespeichert (16 oder 32 Bit).

Die Adressen, wie sie vom Programmierer zur Lokalisierung von Operanden u.ä. verwendet werden können, bezeichnet man als logische Adressen. Die tatsächlich bei der Befehlsausführung wirksame Adresse, die das Resultat einer Adressberechnung sein kann, stellt die effektive Adresse dar und ist an den Anschlußkontakten des Mikroprozessors verfügbar. Der logische Adreßraum umfaßt bei einer 16-Bit-Adresse $2^{16} = 64k = 65536$ Speicherplätze. Es gibt Möglichkeiten, diesen Adreßraum zu vergrößern. Den Adreßraum, der vom Arbeitsspeicher genutzt wird, nennt man den Bereich der physikalischen Adressen. In älteren Mikrorechnern mit kleinem Arbeitsspeicher überstieg der logische Adreßraum bei z.B. 16-Bit-Adressen oftmals den physikalischen Adreßraum ganz beträchtlich. In neueren Mikrorechnern ist durch billige Speicherchips zwar der physikalische Adreßbereich erheblich angewachsen, andererseits haben virtuelle Speichertechnik und Speicherverwaltungschips (MMU -- engl. memory management unit) dazugeführt, daß der logische Adreßbereich dem Programmierer praktisch keine Grenzen mehr setzt (siehe hierzu Abschnitt 7.5).

Bei der Ermittlung der effektiven Adresse sind grundsätzlich zwei Stufen zu unterscheiden:

Für viele Anwendungen reicht der mit 16 Bit adressierbare Speicherbereich von 64 kByte bei weitem nicht mehr aus. Ein größerer Adreßraum, wie er für 16- und 32-Bit-Mikroprozessoren typisch ist, kann beispielsweise durch Vergrößerung der Adresse auf z.B. 32 Bit bereitgestellt werden, was einem Adreßraum von 4 GByte entspricht.


next up previous contents
Nächste Seite: Befehlssatz Aufwärts: Allgemeiner Aufbau und Funktion Vorherige Seite: Bussteuerung   Inhalt
Lars Tornow 2003-04-02