Adressierungsarten
Adressierungsarten sind die Regeln, nach denen ein Befehl festlegt, wo sich seine Operanden befinden – in einem Register, als Immediate eingebettet oder im Speicher an einer Adresse, die aus Registern und Offsets berechnet wird.
Definition
Eine Adressierungsart ist eine Methode, die durch einen Befehl festgelegt wird, um den Speicherort eines Operanden zu bestimmen, von Werten, die direkt in Registern oder im Befehl selbst gehalten werden, bis hin zu Adressen, die aus Basisregistern, Indexregistern und Offsets berechnet werden.
Scope
Dieses Thema behandelt die Benennung und Lokalisierung von Operanden: Immediate, Register, Register-indirekt, Basis-plus-Offset, Indiziert, PC-relativ und komplexere berechnete Modi. Es wird untersucht, wie Adressierungsarten die Codegröße, die Befehlsanzahl und die Hardwarekomplexität beeinflussen. Ausgenommen sind die Bit-Kodierung von Befehlen (Befehlsformate und Kodierung) und die virtuelle-zu-physikalische Übersetzung des Systems (virtueller Speicher und Paging).
Core questions
- Wie berechnet jede Adressierungsart die effektive Adresse oder den Wert eines Operanden?
- Welche Adressierungsarten werden in realen Programmen am häufigsten verwendet und warum?
- Wie reduzieren reichere Adressierungsarten die Befehlsanzahl auf Kosten der Hardware- und Dekodierkomplexität?
- Warum beschränken Load-Store-Architekturen den Speicherzugriff auf wenige einfache Modi?
Key concepts
- Immediate-Adressierung
- Register-Adressierung
- Register-indirekte Adressierung
- Basis-plus-Offset
- indizierte Adressierung
- PC-relative Adressierung
- Berechnung der effektiven Adresse
- Load-Store-Beschränkung
Mechanisms
Jede Adressierungsart definiert, wie der Prozessor einen Operanden ableitet. Immediate-Operanden sind im Befehl kodiert; Register-Operanden werden aus der Registerdatei gelesen; Speicher-Operanden haben eine effektive Adresse, die durch Addition eines Basisregisters, eines optionalen skalierten Indexes und eines Offsets berechnet wird. PC-relative Adressierung bildet Adressen relativ zum Programmzähler, was positionsunabhängigen Code und Sprungziele unterstützt.
Clinical relevance
Adressierungsarten prägen, wie Compiler Code generieren: Basis-plus-Offset bildet sich natürlich auf Strukturfelder und Stack-Variablen ab, indizierte Modi auf Array-Zugriffe und PC-relative Adressierung auf positionsunabhängige ausführbare Dateien und gemeinsam genutzte Bibliotheken. RISC-Load-Store-Designs halten die Speicheradressierung bewusst einfach, um die Pipelining zu erleichtern, während CISC-Maschinen reichere Modi für die Codedichte bieten.
History
Frühe und CISC-Architekturen akkumulierten viele aufwendige Adressierungsarten, einschließlich speicherindirekter und Auto-Inkrement-Formen. Empirische Studien zur Befehlsnutzung zeigten, dass eine kleine Menge einfacher Modi die meisten Zugriffe ausmacht, was die RISC-Entscheidung motivierte, nur eine Handvoll Modi zu unterstützen und den Speicherzugriff auf Lade- und Speicherbefehle zu beschränken.
Key figures
- John L. Hennessy
- David A. Patterson
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- Warum unterstützen RISC-Architekturen so wenige Adressierungsarten?
- Studien haben gezeigt, dass Programme überwiegend wenige einfache Modi verwenden. Die Beschränkung des Speicherzugriffs auf register-indirekte und Basis-plus-Offset-Adressierung hält die Pipeline einfach und die Berechnung der effektiven Adresse schnell, während Compiler komplexere Zugriffsmuster aus diesen Primitiven synthetisieren.
- Wofür wird die PC-relative Adressierung verwendet?
- Die PC-relative Adressierung berechnet eine Adresse als Offset vom Programmzähler. Sie wird für Sprung- und Verzweigungsziele sowie für den Zugriff auf nahegelegene Daten verwendet, wodurch positionsunabhängiger Code ermöglicht wird, der unabhängig davon, wo er im Speicher geladen wird, korrekt ausgeführt wird.