Register vs. Speicher
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 3 von 45.
Du hast nun zwei Orte kennengelernt, an denen Daten innerhalb eines Computers gespeichert werden können:
- Register — winzige Speicherplätze innerhalb der CPU
- Speicher (RAM) — ein riesiges Raster nummerierter Speicherplätze außerhalb der CPU
Aber warum gibt es zwei Orte? Warum kann die CPU nicht einfach direkt mit dem Speicher arbeiten?
Die Antwort ist 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.
Vergleich nebeneinander:
| Merkmal | Register | Speicher (RAM) |
|---|---|---|
| Position | Innerhalb der CPU | Außerhalb der CPU |
| Geschwindigkeit | Extrem schnell (1 Zyklus) | Langsamer (viele Zyklen) |
| Anzahl der Speicherplätze | Sehr wenige (16–32 auf x86-64) | Millionen oder Milliarden |
| Größe jedes Speicherplatzes | 8 Bytes (64 Bits) | 1 Byte |
| Wie du darauf zugreifst | Über den Namen (rax, rbx, rcx...) | Über die Adresse (1000, msg, buffer) |
| Flüchtig? | Ja (verschwindet beim Ausschalten) | Ja (verschwindet beim Ausschalten) |
Die wichtigste Regel in Assembly:
Die CPU kann nicht direkt mit Daten im Speicher arbeiten. Daten müssen zuerst in Register geladen werden.
Das ist nicht optional. So ist die CPU konzipiert. Jede Addition, jeder Vergleich, jede Datenbewegung muss über ein register erfolgen.
Das Drei-Schritte-Muster, das du ständig verwenden wirst:
| Schritt | Was passiert | Beispiel |
|---|---|---|
| 1. LOAD | Daten aus dem memory in ein register kopieren | mov rax, [count] |
| 2. WORK | Etwas mit dem register tun | add rax, 5 |
| 3. STORE | Das result zurück in den memory kopieren (falls erforderlich) | 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 einfach nicht. Du musst sie zuerst in 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