Register vs. Speicher
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 3 von 45.
Du hast jetzt zwei Orte kennengelernt, an denen Daten in einem Computer gespeichert sein können:
- Register: winzige Speicherboxen im CPU
- Speicher (RAM): ein riesiges Raster nummerierter Speicherplätze außerhalb der CPU
Aber warum gibt es zwei Speicherorte? Warum behält die CPU nicht alles im Speicher?
Die Antwort lautet: Geschwindigkeit. Register sind extrem schnell, weil sie sich innerhalb der CPU befinden. Der Speicher ist langsamer, weil er sich außerhalb befindet. Die CPU kann in einem einzigen Zyklus auf ein Register zugreifen, aber der Zugriff auf den Speicher dauert viel länger.
Direkter Vergleich:
| Merkmal | Register | Speicher (RAM) |
|---|---|---|
| Ort | Innerhalb der CPU | Außerhalb der CPU |
| Geschwindigkeit | Extrem schnell (1 Zyklus) | Langsamer (viele Zyklen) |
| Anzahl der Speicherplätze | Sehr wenige (16-32 bei x86-64) | Millionen oder Milliarden |
| Größe jedes Speicherplatzes | 8 Byte (64 Bit) | 1 Byte |
| Wie greifst du darauf zu? | Über den Namen (rax, rbx, rcx...) | Über die Adresse (1000, msg, buffer) |
| Flüchtig? | Ja (geht beim Ausschalten verloren) | Ja (geht beim Ausschalten verloren) |
Die wichtigste Regel in Assembly:
Eine Anweisung kann höchstens einen Speicheroperanden verwenden. Um zwei Werte zu kombinieren, die sich beide im Speicher befinden, lade zuerst einen davon in ein Register.
Register sind außerdem der Ort, an dem du die Werte aufbewahrst, mit denen du arbeitest, denn jeder Zugriff auf den Speicher ist langsam.
Das Drei-Schritte-Muster, das du ständig verwenden wirst:
| Schritt | Was passiert | Beispiel |
|---|---|---|
| 1. LOAD | Daten aus dem Speicher in ein Register kopieren | mov rax, [count] |
| 2. WORK | Etwas mit dem Register tun | add rax, 5 |
| 3. STORE | Das Ergebnis zurück in den Speicher kopieren (falls nötig) | mov [result], rax |
Was passiert, wenn du diese Regel vergisst?
Wenn du versuchst, zwei Zahlen zu addieren, die sich beide im Speicher befinden, gibt der Assembler einen Fehler aus. Die CPU kann das nicht. Du musst zuerst eine davon in ein Register laden.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 ArchitekturÜbe selbstständig: Assembly-Playground