Der Instruktionssatz (englisch Instruction Set Architecture, kurz ISA) ist der vollständige Befehlssatz einer CPU: die Menge aller Operationen, Register, Adressierungsarten und Datentypen, die ein Prozessor versteht. Er ist die vertragliche Schnittstelle zwischen Software und Hardware – der Compiler und der Assembler erzeugen Instruktionen gemäß ISA, und die Mikroarchitektur des Prozessors führt sie aus.

Maschinensprache, Assembler und ISA

Die drei Begriffe hängen eng zusammen: Die Maschinensprache ist die konkrete Binärdarstellung der Instruktionen (die Bytes im Speicher), der Assembler ist die lesbare symbolische Form mit Abkürzungen wie MOV, ADD oder JMP, und der Instruktionssatz ist die Spezifikation dahinter. Eine CPU-Abspaltung unterstützt einen festen ISA – wenn ein Programm nur Instruktionen dieses ISA verwendet, läuft es auf jeder CPU mit derselben Architektur.

Instruktionsklassen und Adressierungsarten

Die Befehle eines ISA lassen sich in Gruppen einteilen: Rechenoperationen (addieren, multiplizieren, vergleichen), Datenzugriffe (laden und speichern), Sprünge und Verzweigungen, sowie Systemoperationen. Jede Instruktion besteht aus einem Opcode (der Operationscode) und Operanden. Die Adressierungsarten legen fest, woher die Operanden kommen: direkt aus einem Register, als unmittelbarer Wert in der Instruktion selbst, aus einer Speicheradresse oder aus einer Basis-plus-Offset-Adresse.

RISC, CISC und offene Architekturen

Historisch unterscheidet man zwei Designphilosophien: CISC (Complex Instruction Set Computer, z. B. x86 von Intel und AMD) bietet viele, teils sehr mächtige und komplexe Instruktionen; RISC (Reduced Instruction Set Computer, z. B. ARM und RISC-V) setzt auf einen kleinen, einheitlichen Satz einfacher Befehle, die meist in einem Taktzyklus ausgeführt werden und fast ausschließlich mit Registern arbeiten (Load/Store-Architektur). RISC-V ist besonders, weil der ISA als offener Standard verfügbar ist und um modulare Erweiterungen (z. B. für Gleitkomma oder Vektoren) ergänzt werden kann.

Ein Verwandter des Instruktionssatzes auf höherer Ebene ist der Bytecode virtueller Maschinen wie der JVM: Er ist ein abstrakter Befehlssatz, der nicht von einer konkreten CPU, sondern von der Laufzeitumgebung ausgeführt wird. Die Codegenerierung des Compilers ist die Phase, in der aus der Zwischendarstellung die Instruktionen des Ziel-ISA erzeugt werden.

Verwandte Grundlagen: Maschinensprache, Assembler, Registerallokation.