Mikrocode (auch Microcode oder μcode) ist eine Steuerungsebene innerhalb der CPU: Statt jeden Befehl des Befehlssatzes direkt in hartverdrahteter Logik auszuführen, übersetzt eine mikroprogrammierte Steuerung die komplexen Befehle in winzige interne Mikro-Operationen (μops). Historisch steckte Mikrocode in einem ROM im Prozessor; heute wird vieles fest verdrahtet erzeugt, für seltene komplexe Fälle bleibt ein Mikrocode-ROM, und Updates lassen sich nachträglich einspielen.
Hartverdrahtet vs. mikroprogrammiert
Das Steuerwerk der CPU gibt es in zwei Grundbauarten:
- Hartverdrahtet – jede Instruktion erzeugt ihre Steuersignale direkt aus Logikgattern (typisch für RISC-Prozessoren wie ARM oder RISC-V und für die meisten modernen Kerne).
- Mikroprogrammiert – Befehle werden über ein Mikroprogramm ausgeführt: eine Folge von Mikro-Operationen, die in einem Steuerspeicher abgelegt ist (klassisch bei CISC-Prozessoren wie dem IBM System/360, VAX und frühen x86-Chips).
Die Idee formulierte Maurice Wilkes bereits 1951; produktiv machte sie IBM mit dem System/360 (1964). Ein Vorteil: Fehler im Befehlssatz ließen sich per Mikrocode-Änderung beheben, ohne die Hardware zu tauschen – und komplexe Befehle brauchten wenig Logikfläche.
Mikro-Operationen in modernen x86-CPUs
Auch heutige x86-64-Prozessoren zerlegen ihre CISC-Befehle intern in RISC-artige μops (siehe Opcode und Maschinensprache). Der Decoder erledigt die einfachen Fälle fest verdrahtet; besonders komplexe oder seltene Befehle (z.B. REP MOVS, Systembefehle, komplizierte String-Operationen) laufen über Mikrocode-Sequenzen aus dem ROM. Die μops wandern dann wie normale RISC-Befehle durch die Pipeline, das Register-Renaming und die superskalare Ausführung. Für den Compiler sind die μops unsichtbar: Sein Instruction Scheduling plant die Befehlsreihenfolge auf der Ebene der sichtbaren Instruktionen, die Zerlegung übernimmt danach die Hardware.
Mikrocode-Updates
Weil der Mikrocode in (umschreibbarem) Speicher liegt, können Hersteller ihn nachträglich korrigieren:
- Linux lädt beim Boot Mikrocode-Pakete (
intel-microcodebzw.amd64-microcode) über den CPU-Treiber; auch das UEFI/BIOS spielt Updates ein. - Nach den Spectre- und Meltdown-Sicherheitslücken 2018 lieferten Intel und AMD umfangreiche Mikrocode-Patches, die das Verhalten der Sprungvorhersage und der spekulativen Ausführung absicherten.
- Ein Mikrocode-Update ändert nicht den sichtbaren Befehlssatz – Software läuft unverändert weiter, nur die interne Umsetzung ist eine andere.
Einordnung
Der Mikrocode ist ein Teil der Mikroarchitektur (die konkrete Implementierung der ISA), aber nicht mit ihr identisch: Die Mikroarchitektur umfasst Pipelines, Caches, Vorhersage und Register – der Mikrocode ist nur die mikroprogrammierte Steuerebene darin. Und er ist weder Maschinensprache noch Firmware im üblichen Sinne: Maschinensprache ist das, was Programme ausführen; Mikrocode steuert intern, wie die CPU das tut. Für den Prozessor selbst ist er unsichtbar – nur bei extremen Fehlern oder Sicherheitslücken merkt man ihn als Update.