Wikipedia · einfach zusammengefasst · Stand
Befehlssatz
Der Befehlssatz, auch Instruktionssatz (englisch instruction set), eines Prozessors ist in der Rechnerarchitektur die Menge der Maschinenbefehle, die ein …
Inhalt5 Abschnitte
Grundidee
Der Befehlssatz, auch Instruktionssatz genannt, ist in der Rechnerarchitektur die Menge aller Maschinenbefehle, die ein bestimmter Prozessor ausführen kann. Er legt also fest, welche grundlegenden Aktionen ein Prozessor direkt versteht, etwa Daten laden, rechnen, speichern oder im Programm springen. Je nach Prozessor kann der Umfang stark variieren, zum Beispiel zwischen 33 und über 500 Befehlen.
CISC-Prozessoren haben tendenziell größere Befehlssätze als RISC-Prozessoren. Auch neuere Prozessoren besitzen meist umfangreichere Befehlssätze als ältere. In erweitertem Sinn bezeichnet „Befehlssatz“ den Befehlsvorrat eines Prozessors.
Wichtige Eigenschaften
Ein Befehlssatz heißt orthogonal, wenn jeder Befehl auch jede Adressierungsart des Prozessors verwenden kann. Eine Adressierungsart beschreibt, wie ein Prozessor mithilfe von Adressangaben, Offsets und Registerinhalten die effektive Adresse von Operanden berechnet. Operanden sind die Werte oder Speicherstellen, mit denen ein Maschinenbefehl arbeitet.
Ein Befehlssatz heißt symmetrisch, wenn alle Datentypen und Adressierungsarten eines Befehls nicht nur für seine Quelloperanden, sondern auch für seine Zieloperanden erlaubt sind. Datentypen eines Prozessors sind dabei alle Typen, die unmittelbar durch Maschinenbefehle bearbeitet werden können, also ohne softwaremäßige Emulation.
Aufbau von Befehlen
Die einzelnen Befehle eines Befehlssatzes sind Datenworte. Sie enthalten meist einen Opcode und einen oder mehrere Operanden. Der Opcode gibt an, welcher Befehl gemeint ist; die Operanden geben an, womit der Befehl arbeitet. Struktur und Format dieser Angaben sind je Befehlstyp einheitlich festgelegt.
Die Breite der verwendeten Befehlsworte kann je nach Prozessortyp deutlich unterschiedlich sein. Sie kann auch größer sein als die gewöhnlicher Speicherworte, also größer als die Datenbusbreite des Prozessors. Dann müssen Befehle durch mehrere Speicherzugriffe aus dem Speicher in den Prozessor geladen werden.
Eine typische Form ist die Zwei-Operanden-Befehlsform, sie ist aber nicht die einzige. Manche Prozessoren erlauben höchstens einen Operanden. Dann müssen Befehle, die eigentlich auf zwei Größen wirken, als zweiten Operanden implizit ein internes Register verwenden, zum Beispiel den Akkumulator. Andere Prozessoren erlauben bis zu drei Operanden. Drei-Operanden-Befehle unterscheiden Quelle, verknüpften Wert und Ziel des Ergebnisses, sodass die Quelle nicht überschrieben werden muss.
Ein Beispiel ist eine MIPS32-Instruktionskodierung für die Addition addi: Eine Binärzahl als Immediate value wird mit dem Wert im Register Addr2 addiert, und das Ergebnis wird im Register Addr1 gespeichert. Immediate bedeutet, dass ein Wert bereits in der Instruktion enthalten ist und nicht erst aus einer Speicheradresse geladen werden muss.
Arten von Befehlen
Der Befehlssatz eines Mikroprozessors besteht grob aus mehreren Arten von Befehlen. Transferbefehle bewegen Daten innerhalb des Systems. Quelle und Ziel können Speicherstellen oder Prozessorregister sein. Die Daten werden dabei typischerweise nicht verändert, sondern nur kopiert; sie bleiben also am Quellort erhalten. Je nach Befehl und Prozessortyp können einzelne Bytes oder mehrere Bytes auf einmal transportiert werden. Typische Befehlsnamen gehen auf englische Wörter wie move, load, store oder transfer zurück.
Befehle zur Datenmanipulation verändern Inhalte von Speicherzellen. Beispiele sind shift und convert. Arithmetische und logische Befehle führen Rechen- oder Logikoperationen aus, zum Beispiel Zählen, Addieren oder eine UND-Verknüpfung. Der Hauptoperand ist oft ein Prozessorregister, in vielen Fällen der Akkumulator, aber das ist nicht zwingend. Typische Befehlsnamen sind englische Kürzel wie ADD oder AND.
Ein-/Ausgabebefehle dienen zum Lesen und Schreiben von Daten über Peripheriegeräte. Peripheriegeräte sind die Verbindungen zur Außenwelt des Computers. Sprungbefehle, auch Befehle zur Programmkontrolle oder Programmsteuerung genannt, verändern den Programmablauf. Sie ermöglichen Verzweigungen, Schleifen, Reaktionen auf verschiedene Zahlenwerte und den Aufruf von Unterprogrammen, also Subroutinen. Man unterscheidet unbedingte Sprünge und bedingte Sprünge. Bedingte Sprünge hängen typischerweise vom Zustand bestimmter Bits im Prozessor-Zustandsregister ab. Typische Befehlsnamen beruhen auf jump oder branch.
Stack-Befehle legen Daten auf den Stack oder holen sie von dort zurück. Der Stack ist ein Stapelspeicher. Befehle zum Ablegen heißen meist push, Befehle zum Zurückholen pop oder pull. Dabei wird das Stackpointer-Register automatisch aktualisiert. Viele CPUs besitzen allerdings keine Stack-Befehle.
Kombinierte Befehle setzen sich aus elementaren Aktionen anderer Befehlsarten zusammen. Beim Aufruf einer Subroutine wird zum Beispiel meist ein Sprung ausgeführt und zugleich die bisherige Programmadresse als Rücksprungziel auf dem Stack gespeichert. Manche Prozessoren unterstützen Zählschleifen durch Befehle, die einen Zähler erhöhen oder verringern und bei Erreichen einer Grenze, etwa einem Unterlauf beim Herabzählen auf Null, einen bedingten Rücksprung ausführen. Solche kombinierten Befehle sind besonders typisch für CISC-Prozessoren.
Befehlssatzarchitekturen
Wenn man eine Familie von Prozessoren mit ähnlichem Befehlssatz zusammenfasst, spricht man von einer Befehlssatzarchitektur, auf Englisch Instruction Set Architecture, kurz ISA. Eine ISA beschreibt also nicht nur einen einzelnen Prozessor, sondern eine gemeinsame Befehlsgrundlage für mehrere verwandte Prozessoren.
Verbreitete Befehlssatzarchitekturen sind IA-32, IA-64, ARM, Power und PowerPC beziehungsweise die PAPR-Spezifikation, SPARC und RISC-V. IA-32 ist die 32-Bit-ISA der ursprünglichen 16-bittigen x86-Architektur; auch die 64-Bit-Erweiterung x64 wird IA-32 zugeordnet. IA-64 bezeichnet die Itanium-Architektur und ist nicht mit x64 zu verwechseln.