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.
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:
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.
- Befehl lädt Werte aus dem RAM einmalig in Register.
- Die ALU rechnet beliebig oft register-zu-register — jeweils 1 Takt.
- 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:
Freies Notizpapier für Berechnungen — Operanden und Zwischenergebnisse. Auf x86-64 heißen sie z. B. RAX, RBX, …, auf ARM X0–X30.
Haben eine feste Aufgabe für den Ablauf des Programms — der Programmierer fasst sie selten direkt an.
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 Denkfehler — Register ≠ 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 rein — Das 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.