Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Adressierung (Rechnerarchitektur)

Adressierung ist in der Programmierung das Festlegen, auf welche Operanden (z. B. Datenfelder) sich ein Maschinenbefehl bezieht. Die Operanden können auf …

Inhalt6 Abschnitte
  1. 1. Grundidee der Adressierung
  2. 2. Bezeichnungen und Unterschiede von Befehlssätzen
  3. 3. Speicher, Register und Leistungsaspekte
  4. 4. Register-, unmittelbare und direkte Adressierung
  5. 5. Indizierte, relative und indirekte Adressierung
  6. 6. Virtuelle Adressierung

Grundidee der Adressierung

Adressierung legt bei einem Maschinenbefehl fest, auf welche Operanden er sich bezieht. Operanden sind die Daten, mit denen ein Befehl arbeitet, etwa Quellwerte und Zielwerte. Eine Adressierungsart oder ein Adressierungsmodus bestimmt, ob ein Operand zum Beispiel unmittelbar im Befehl steht, in einem Register liegt oder über eine Speicheradresse gefunden wird.

Welche Adressierungsart gilt, wird durch den Operationscode (Opcode, also die codierte Angabe der auszuführenden Operation) und die im Maschinenbefehl codierten Operandenangaben bestimmt. Der Prozessor dekodiert den Befehl, berechnet nötige Adressen und lädt die verwendeten Daten. Enthält ein Befehl mehrere Quell- und/oder Zieloperanden, benötigt jeder Operand eigene Angaben zur Adressierung. Angaben wie Operandenlänge oder Sprungindikatoren gehören nicht zur Adressierung im engeren Sinn.

In Assembler legt der Programmierer die Adressierungsart durch Opcode und Parameter selbst fest. Bei höheren Programmiersprachen erzeugt normalerweise der Compiler die Maschinenbefehle und damit die Adressierungsarten. Die Arten sind Teil der Befehlssatzarchitektur und bestimmen, wie die tatsächliche physische Speicheradresse eines Operanden ermittelt wird, etwa mit Registerinhalten und Konstanten aus dem Befehl.

Bezeichnungen und Unterschiede von Befehlssätzen

Für Adressierungsarten gibt es keine allgemeingültige Namensgebung. Autoren und Hardwarehersteller können denselben Modus unterschiedlich benennen oder denselben Namen für unterschiedliche Modi verwenden. Außerdem kann eine Funktion in einer Architektur einen einzigen Modus bilden, in einer anderen aber durch mehrere Modi umgesetzt werden.

Unterschieden werden häufig logische beziehungsweise programmseitige Adressen und Maschinenadressen. Logische Adressen gehören zur Ebene der Programmierung und werden unter anderem als absolut, relativ, indirekt oder symbolisch bezeichnet; ihre genaue Abgrenzung kann sich überschneiden. Maschinenadressen gehören zur Ebene des Maschinenbefehls und heißen oft auch reale oder physische Adressen.

Mit „Adressierung“ kann die Wahl und Codierung von Befehlen beim maschinennahen Programmieren, die codierten Operandenangaben im Maschinenbefehl oder die Prozessorfunktion zur Ermittlung tatsächlicher Adressen gemeint sein. Das bloße Benennen von Operanden in einer höheren Sprache, etwa „MOVE A TO B“, ist nicht der hier behandelte Adressierungsmodus.

Befehlssätze unterscheiden sich auch bei der Adressierung. So kann eine Registernummer im Opcode selbst oder in einem eigenen Parameterfeld stehen; im ersten Fall enthält der Befehlssatz entsprechend mehr Operationscodes. In der Prozessorfamilie System/390 können nur 1-stellige Direktwerte („immediate“) im Maschinenbefehl stehen. Für indizierte Adressierung werden Offset und Registernummer in einem Halbwort gespeichert: 4 Bits für die Registernummer und 12 Bits für den ganzzahligen Offset.

Speicher, Register und Leistungsaspekte

Im einfachsten Modell hat der Speicher einen linearen Adressraum: Seine Speicherplätze sind ab 0 nummeriert, und eine Adresse ist die Nummer eines Speicherplatzes. Prozessorregister sind normalerweise ebenfalls nummeriert. Je nach Adressierungsart haben Maschinenbefehle unterschiedliche Strukturen und können einen oder mehrere Quell- oder Zieloperanden enthalten.

Registeradressen sind meist viel kürzer als Hauptspeicheradressen, weil ein Prozessor wenige Register, aber sehr viele Speicherplätze hat. Bei 16 Registern und 4 GiB Speicher braucht eine Registeradresse 4 Bit, eine Hauptspeicheradresse dagegen 32 Bit. Registeradressen können oft zusammen mit dem Befehlscode in einem Speicherwort stehen und sind ohne weitere Speicherzugriffe verfügbar. Für Hauptspeicheradressen sind weitere Speicherzugriffe und damit zusätzliche Ausführungszeit nötig.

Bei einem rein orthogonalen Befehlssatz wäre jeder Befehl mit jeder Adressierungsart verwendbar. Bei verbreiteten Prozessorfamilien gibt es jedoch Einschränkungen; beim Assemblerprogrammieren muss deshalb das Programmiermodell angeben, welche Arten für welche Befehle verfügbar sind. Hohe Geschwindigkeiten werden mit Befehlen erreicht, die in Registern arbeiten. Leistungsoptimierte Prozessoren besitzen daher meist eine Load/Store-Architektur. Hauptspeicher-zu-Hauptspeicher-Adressierung wird heute nur noch in integrierten Schaltkreisen und eingebetteten Systemen mit wenig Speicherplatz eingesetzt.

Register-, unmittelbare und direkte Adressierung

Bei der Registeradressierung („register direct“) bezieht sich ein Befehl auf den Inhalt eines Prozessorregisters. Ein lesender Befehl findet seinen Operanden bereits im Register und muss ihn nicht erst aus dem Speicher laden. Bei impliziter Registeradressierung ist das Register durch den Opcode festgelegt, zum Beispiel der Akkumulator. Bei expliziter Registeradressierung steht die Registernummer in einem Registerfeld des Maschinenbefehls oder ist Teil des Befehlscodes.

Beispiel: „add_rrr R2, R1, R3“ addiert die Inhalte von Register 1 und Register 2 und speichert das Ergebnis in Register 3. Der Befehl enthält damit drei Registeradressierungen: zwei Quellen und ein Ziel.

Bei unmittelbarer Adressierung stehen der oder die Operanden selbst, nicht ihre Adressen, im Befehlscode oder in unmittelbar folgenden Speicherwörtern. Der Befehl enthält in der Regel noch einen weiteren Operanden. „load_direct acc, 10110“ lädt beispielsweise den Wert 22 (10110₂) in den Akkumulator, nicht den Inhalt von Speicherplatz 22.

Bei absoluter oder direkter Adressierung steht dagegen die vollständige Speicheradresse des Operanden direkt im Befehl; die Daten befinden sich an dieser Adresse. Dies ist Referenzstufe 1. „add_AdrAdrAdr 10110, 00110, 00001“ addiert die Inhalte der Adressen 22 und 6 und speichert das Ergebnis an Adresse 1.

Indizierte, relative und indirekte Adressierung

Indizierte und relative Adressierung verwenden Register, um Hauptspeicherzellen anzusprechen. Bei indizierter Adressierung wird der Inhalt eines Indexregisters zu einer aus anderen Angaben gebildeten Adresse addiert. Ein Basis-Adress-Register, etwa das Spezialregister „index“, wird mit einem im Befehl enthaltenen Offset kombiniert; oft sind negative Offsets möglich. Das Ergebnis ist direkt die Adresse des Operanden und damit Referenzstufe 1.

Im Beispiel wird zunächst mit „load_direct index, 10110“ die Basisadresse 22 in das Indexregister geladen. „add_iii 00, 01, 10“ addiert dann die Inhalte der Adressen index+00₂ = 22 und index+01₂ = 23 und speichert das Ergebnis bei index+10₂ = 24. Solche Zugriffe werden vor allem für Arrays und zusammengesetzte Datentypen verwendet. Bei mehreren Registern muss der Befehl angeben, welches Basisregister gilt; im Beispiel ist „index“ fest vorgegeben.

Relative Adressen können kürzer sein, beispielsweise 8 Bit. Bei einem 8-Bit-Opcode ergibt sich mit drei solchen Angaben eine Befehlslänge von 8+3*8=32 Bit. Das spart Platz und kann den gesamten Befehl auf einmal ladbar machen, begrenzt aber den Bereich auf index+00000000₂ bis index+11111111₂. Bei relativer Adressierung wird statt eines Indexregisters der Befehlszähler (Program Counter, PC) verwendet: Die Adresse ist relativ zur Speicherstelle des Befehls. Bei segmentierter Adressierung kann der Offset in einem Register stehen; das Basis-Adress-Register heißt dann oft Segmentregister.

Bei indirekter Adressierung verweist der Befehl zunächst auf ein Register oder eine Speicheradresse im Hauptspeicher, beim 6502 in dessen Zeropage. Der Inhalt dieses Registers oder dieser Speicherzelle(n) liefert die effektive Adresse der Operation; dies ist Referenzstufe 2. Bei indirekt-indizierter Adressierung kann zusätzlich der Inhalt eines Indexregisters auf diese ermittelte Adresse addiert werden.

Virtuelle Adressierung

Virtuelle Adressierung ist ein Werkzeug des Betriebssystems. Sie ermöglicht die Ausführung von Programmen, die mehr Speicherplatz benötigen, als physischer Arbeitsspeicher (RAM) vorhanden ist. Der gesamte dafür verfügbare Bereich heißt virtueller Adressraum.

Das Betriebssystem nutzt virtuelle Speicherverwaltung und eine Memory Management Unit. Programmteile können auf die Festplatte ausgelagert und bei Bedarf in den Arbeitsspeicher geladen werden, wenn eine gewählte Adresse außerhalb des im RAM befindlichen Adressraums liegt. Adressen können dabei direkt, relativ, indiziert oder symbolisch angegeben werden.

Weiterlesen

Programmierung Beim Programmieren sind wesentliche Aspekte zur Softwarequalität zu berücksichtigen und durch die Gestaltung des Quellcodes umzusetzen. Siehe dazu als Beispiele … Opcode Ein spezielles Programm, der Assembler, erzeugt Maschinencode, indem es im Wesentlichen die Mnemonics durch ihre jeweiligen Opcodes ersetzt. Die meisten … Befehlssatz Der Befehlssatz, auch Instruktionssatz (englisch instruction set), eines Prozessors ist in der Rechnerarchitektur die Menge der Maschinenbefehle, die ein … Assemblersprache Eine Assemblersprache, kurz auch Assembler genannt (von englisch to assemble ‚zusammenfügen'), ist eine Programmiersprache, die auf den Befehlsvorrat eines … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten. Prozessor Aufbau und Funktionale Einheiten · Hauptprozessor (CPU) und Mehrprozessorkerne · Steuer- bzw. Leitwerk · Rechenwerk und Register · Datenleitungen · Caches und MMU. Maschinensprache Mit einem Assembler: Assemblersprachen formulieren die Prozessorbefehle des Maschinencodes als Mnemonics in einer einfachen Syntax. Dieser Quelltext wird … Integrierter Schaltkreis Integrierter Schaltkreis. auf dünnen, meist wenige Millimeter großen Plättchen aus Halbleiter-Material aufgebrachte elektronische Schaltung. Artikel … Dualsystem Das Dualsystem (lat. dualis „zwei enthaltend“), auch Zweiersystem oder Binärsystem genannt, ist ein Zahlensystem, das zur Darstellung von Zahlen nur zwei … Betriebssystem Betriebssysteme bestehen in der Regel aus einem Kernel (deutsch: Kern), der die Hardware des Computers verwaltet, sowie speziellen Programmen, die beim Start … Random-Access Memory Die gängigsten Formen gehören zu den Halbleiterspeichern. RAM wird als integrierter Schaltkreis hauptsächlich in Silizium-Technologie realisiert und in allen …