Adressierung (Rechnerarchitektur)
Als Adressierung bezeichnet man in der elektronischen Datenverarbeitung die eindeutige Lokalisierung einer Speicherzelle oder eines Geräts in einem Computer. Nur durch eine eindeutige Zuordnung von Adressen zu den Speicherzellen ist es möglich auf abgelegte Daten im Arbeitsspeicher oder auf der Festplatte und auf angeschlossene Geräte wie beispielsweise Drucker, Scanner, Laufwerke gezielt zuzugreifen.
Adressierung im Arbeitspeicher
Sie wird beispielsweise verwendet, um die Operanden für eine Rechenoperation im Speicher zu lokalisieren und den Speicherort für das Ergebnis anzugeben. Die Zuführung der Adressen zum Rechenwerk erfolgt dabei über den Adressbus. Je lückenloser die Operanden im Speicher abgelegt sind, desto schneller kann der Datenzugriff erfolgen. Bei idealer Speicherausrichtung erfolgt der Zugriff innerhalb eines Prozessortaktes.
Man unterscheidet fünf Adressierungsarten:
- Registeradressierung. Ziel der Adresse ist ein Register im Prozessor. Die Adresse des Registers wird direkt angegeben.
- Absolute Adressierung. Ziel der Adresse ist eine Speicherzelle im Hauptspeicher. Die Adresse der Speicherzelle wird direkt angegeben.
- Relative Adressierung. Ziel der Adresse ist eine Speicherzelle im Hauptspeicher. Zur übergebenen Adresse wird der Wert des Spezialregisters PC (program counter) als Offset hinzuaddiert.
- Indirekte Adressierung. Ziel der Adresse ist eine Speicherzelle im Hauptspeicher. Die übergebene Adresse verweist auf ein Register, in dem wiederum die Adresse des eigentlichen Ziels im Hauptspeicher abgelegt ist.
- Indizierte Adressierung. Ziel der Adresse ist eine Speicherzelle im Hauptspeicher. Übergeben werden zwei Adressen. Die erste verweist auf ein Register, in dem ein Wert abgelegt ist. Dieser Wert wird als Offset zur zweiten Adresse hinzuaddiert, das Ergebnis ist die Adresse des Ziels im Hauptspeicher.
Absolute oder direkte Adressierung
Bei dieser Adressierungsart wird die Speicheradresse bei jedem Befehl direkt und vollständig angegeben. Die Gesamtheit der möglichen Adressen bildet den Adressbereich dieser Adressierungsart.
# Addiere Adresse 22 und 6 und speichere das Ergebnis in Adresse 1 add 10110, 00110, 00001
Diese Adressierungsart wird heute nur noch in Integrierten Schaltkreisen und Embedded Systems mit wenig Speicherplatz angewandt. So würde in einem Rechner mit einem 32 Bit breitem Adressbus solch einfacher Additionsbefehl allein für die Adressangaben 96 Bit benötigen. Zur Verringerung des Speicheraufwands werden zwei weitere Möglichkeiten der Adressierung verwendet.
indizierte und relative Adressierung
Beide Adressierungsarten verwenden ein Register zur Speicherplatzersparnis. Bei der indizierten Adressierung wird das so genannte Indexregister zu jeder Adressangabe hinzuaddiert.
# Addiere die Adresse 22 und 23 und speichere das Ergebnis in Adresse 1 load index, 10110 add 0, 1, 00001
Für das Durchlaufen von Speicherbereichen ist dies hervorragend geeignet. Bei der relativen Adressierung speichert das Register die so genannte Basisadresse und die Adressen für die Befehle werden nur noch als Offset angegeben. Dabei sind negative und positive Offset möglich.
#Addiere die Adresse 65540 und 65550 und speichere das Ergebnis in 65537 /* load basis, 1000000000000000 add 0011, 1101, 0001 */ load basis, 10000000000000000 add 0100, 1110, 0001
Da ein Rechner mehr als ein Register hat, muss ein jeder Befehl dieser Art einen kurzen Verweis enthalten, meist eine 4-bit oder 8-bit Angabe, die das Register angibt. Aber auch diese Adressierungsarten sind für heutige Rechner nicht mehr ausreichend.
Virtuelle Adressierung
Betriebssysteme verwenden die Virtuelle Adressierung, um Programme ausführen zu können, die mehr Speicherplatz benötigen als an physikalischem Arbeitsspeicher im RAM überhaupt zur Verfügung steht. Der gesamte zur Verfügung stehende Speicherplatz wird als Virtueller Adressraum bezeichnet und der Zugriff auf die darin enthaltenene Adressen ist die virtuelle Adressierung. Das jeweilige Betriebssystem verwendet eine Virtuelle Speicherverwaltung, die sich einer Memory Management Unit bedient, um Teile des Programms auf die Festplatte auszulagern und ggf. in den Arbeitsspeicher zu laden, falls sich eine gewählte Adresse außerhalb des im RAM befindlichen Adressraums befindet. Die Angabe der Adressen erfolgt dabei entweder direkt, relativ, indiziert oder auch symbolisch.
symbolische Adressierung
Symbolische Adressierung erlaubt es dem Programmierer Adressen mit Namen, sogenannten Mnemonics zu belegen, um Fehler bei der Angabe der Adresse zu vermeiden.
#Addiere die Adresse 65539 und 65549 und speichere das Ergebnis in 65537 define operand1, 1000000000000011 define operand2, 1000000000001101 define ergebnis, 1000000000000001 add operand1, operand2, ergebnis
Rechnerarchitektur
Die verschiedenen Adressierungsarten werden von der Rechnerarchitektur ermöglicht bzw. realisiert. Analog dazu, wie von der Hausarchitektur die Anordnung der Zimmer bestimmt wird und dass man über das Treppenhaus die oberen Stockwerke erreichen kann.
Adressierung von Arrays
Eine spezielle Form der Adressierung erfordern mehrdimensionale Datenfelder, wie zum Beispiel Tabellen oder Assoziative Arrays, und die Umrechnung von Feldreferenz in Speicheradresse. Ausführlich behandelt dieses Thema der Artikel Array.
Adressierung bei Modellbahnen
Im Motorola 2-Format, das ausschließlich für Wechselstrombahnen geeignet ist, können bis zu 80, beim DCC-Format bis zu 9999 Adressen programmiert werden.
Die Adressen werden über Steuerpulte eingestellt und werden im Dekoder eingespeichert. Werden jetzt Fahrbefehle an diese Adresse geschickt, reagiert nur der Dekoder mit dieser Adresse. Sind zwei Dekoder auf die selbe Adresse programmiert, reagieren beide gleichzeitig.
Siehe auch
- Adressierung (allgemein)