Befehlsformate und Kodierung
Befehlsformate definieren, wie jeder Maschinenbefehl binär aufgebaut ist – den Operationscode, Registerfelder und unmittelbare Werte – und bestimmen, wie kompakt Programme gespeichert werden und wie einfach die Hardware sie dekodieren kann.
Definition
Ein Befehlsformat ist die definierte Anordnung von Bitfeldern innerhalb eines Maschinenbefehls, die dessen Operation und Operanden kodiert, und die Befehlskodierung ist das Schema, das Befehle diesen binären Mustern zuordnet.
Scope
Dieses Thema behandelt die binäre Darstellung von Befehlen: Festlängen- versus Variablencodierungen, die Felder, die Operation, Quell- und Zielregister sowie Immediates spezifizieren, und den Kompromiss zwischen Codedichte und Dekodierungsvereinfachung. Es umfasst repräsentative Formatfamilien wie die R/I/S/B/U/J-Typen von RISC-V. Ausgenommen sind die Wahl der Adressierungsmodi, die Operanden verwenden (Adressierungsmodi), und die umfassendere RISC/CISC-Philosophie (RISC und CISC).
Core questions
- Welche Felder muss eine Befehlskodierung enthalten, um eine Operation und ihre Operanden zu spezifizieren?
- Wie tauschen Festlängen- und Variablencodierungen Dekodierungsvereinfachung gegen Codedichte aus?
- Wie werden Immediate-Werte und große Konstanten innerhalb begrenzter Befehlsbits kodiert?
- Wie vereinfacht eine regelmäßige Kodierung die Pipeline-Befehlsdekodierung?
Key concepts
- Operationscode-Feld
- Register-Spezifizierer-Felder
- Immediate-Felder
- Festlängen- vs. Variablencodierung
- Codedichte
- Dekodierungsregelmäßigkeit
- Befehlsformatfamilien (R/I/S/B/U/J)
Mechanisms
Jeder Befehl ist in Bitfelder unterteilt: Ein Operationscode wählt die Operation aus, Registerfelder benennen Operanden, und Immediate-Felder enthalten Konstanten oder Adressoffsets. Festlängenformate (wie bei RISC-V) halten alle Befehle gleich breit und platzieren Felder konsistent, sodass die Dekodierung einfach und schnell ist; Variablencodierungen (wie bei x86) packen Befehle für Dichte enger, auf Kosten einer komplexeren Dekodierung.
Clinical relevance
Kodierungsentscheidungen wirken sich auf einen Prozessor aus: Regelmäßige Festlängenformate ermöglichen die einfachen, schnellen Dekodierer, die eine tiefe Pipeline praktisch machen, während dichte Variablencodierungen den Instruktionsspeicherverkehr reduzieren. Compiler und Assembler müssen diese Formate präzise ansprechen, und Befehlssatzerweiterungen müssen in den bestehenden Kodierungsraum passen.
History
Frühe Befehlssätze verwendeten unregelmäßige, handoptimierte Kodierungen, um knappen Speicher zu sparen. Die RISC-Bewegung der 1980er Jahre bevorzugte einheitliche Festlängenformate, um die Dekodierung und Pipeline zu optimieren, während CISC-Sätze wie x86 dichte Variablencodierungen beibehielten. Moderne offene ISAs wie RISC-V kodifizieren saubere, erweiterbare Formatfamilien.
Key figures
- David A. Patterson
- John L. Hennessy
Related topics
Seminal works
- patterson2020
- hennessy2019
Frequently asked questions
- Warum verwenden RISC-Befehlssätze Festlängenkodierungen?
- Festlängenbefehle ermöglichen es dem Prozessor, den nächsten Befehl zu lokalisieren und seine Felder zu extrahieren, ohne zuerst die Länge dekodieren zu müssen, was die Fetch- und Dekodierungsphasen vereinfacht und beschleunigt und eine tiefe Pipeline wesentlich einfacher macht als bei Variablencodierungen.
- Wie werden große Konstanten gehandhabt, wenn Befehle nur eine feste Bitbreite haben?
- Immediate-Felder sind begrenzt, daher werden große Konstanten in Teilen aufgebaut – zum Beispiel setzt ein Load-Upper-Immediate-Befehl die hohen Bits, und ein folgender Befehl addiert die niedrigen Bits – oder die Konstante wird im Speicher platziert und geladen.