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
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.