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-microcode bzw. 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.