Register: der schnellste Speicher der CPU

Bevor eine CPU rechnet, muss sie die Zahlen irgendwo halten — und zwar dort, wo das Rechenwerk in einem einzigen Takt drankommt. Dieser Ort heißt Register. Sie sind der kleinste, schnellste und teuerste Speicher im ganzen Rechner.

Ein Register ist eine winzige Speicherzelle direkt in der CPU, die genau einen Wert hält (typisch 8, 16, 32 oder 64 Bit). Die ALU liest ihre Operanden aus Registern und schreibt das Ergebnis wieder in ein Register — alles im selben Taktzyklus.

Probier es aus

Ein 8-Bit-Register ist nichts weiter als acht Bits nebeneinander. Jedes Bit steht für eine Zweierpotenz. Kipp ein paar Bits und sieh, welchen Wert das Register dann hält:

Register R0 — 8 Bit breit
Klick auf ein Bit, um es zu kippen. Ein Register hält genau einen Wert — hier 8 Bit, also 0–255.
dezimal: 73binär: 01001001hex: 0x49
Tipp: Drück mehrfach +1 und beobachte, was bei 255 passiert — das Register läuft über und beginnt wieder bei 0 (Overflow).

Warum überhaupt Register?

Der Hauptspeicher (RAM) ist riesig, aber im Vergleich zur CPU quälend langsam: Ein RAM-Zugriff kostet die CPU schnell 100+ Takte Wartezeit. Ein Registerzugriff dauert dagegen einen Takt. Würde die ALU jeden Operanden frisch aus dem RAM holen, stünde der Prozessor die meiste Zeit nur herum. Register sind das Notizpapier direkt unter der Hand des Rechenwerks.

  1. Befehl lädt Werte aus dem RAM einmalig in Register.
  2. Die ALU rechnet beliebig oft register-zu-register — jeweils 1 Takt.
  3. Erst das Endergebnis wird zurück in den RAM geschrieben.

Welche Sorten von Registern gibt es?

Nicht jedes Register darf alles. Grob teilt man sie in zwei Gruppen:

🧮 Universalregister

Freies Notizpapier für Berechnungen — Operanden und Zwischenergebnisse. Auf x86-64 heißen sie z. B. RAX, RBX, …, auf ARM X0X30.

⚙️ Spezialregister

Haben eine feste Aufgabe für den Ablauf des Programms — der Programmierer fasst sie selten direkt an.

Die wichtigsten Spezialregister
PC / IPProgram Counter — Adresse des nächsten Befehls
IRInstruction Register — der gerade geladene Befehl
SPStack Pointer — Spitze des Stacks
FLAGSStatusregister — Zero, Carry, Overflow, Sign …
Warum eigentlich?Warum ist die Registerbreite so eine große Sache?

Die Breite eines Universalregisters (32 vs. 64 Bit) bestimmt, wie große Zahlen die CPU in einem Stück verarbeiten kann und wie viel Adressraum sie direkt ansprechen kann. 64-Bit-Register können Adressen bis 264 halten — der eigentliche Grund, warum „64-Bit-Systeme" mehr als 4 GB RAM nutzen können. Mit dem interaktiven 8-Bit-Register oben siehst du das Limit im Kleinen: bei 8 Bit ist nach 255 Schluss.

Häufiger DenkfehlerRegister ≠ RAM ≠ Cache

Häufige Verwechslung: „Variablen liegen im Register." Meist nicht — Variablen leben im RAM, und der Compiler lädt sie nur bei Bedarf in Register. Auch Cache und Register sind nicht dasselbe: Der Cache ist ein automatischer, vom Programm unsichtbarer Zwischenspeicher zwischen CPU und RAM. Register dagegen haben Namen und werden von den Befehlen explizit benannt (add rax, rbx).

Tiefer reinDas Statusregister steuert if und Schleifen

Nach einer Rechnung setzt die ALU Flags im Statusregister: das Zero-Flag, wenn das Ergebnis 0 war, das Carry-/Overflow-Flag beim Überlauf usw. Ein if (a == b) wird in Maschinensprache zu „rechne a - b, und springe, wenn das Zero-Flag gesetzt ist". So entstehen Verzweigungen und Schleifen aus einem einzigen kleinen Register.