Register vs. Speicher
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 3 von 45.
Sie haben nun zwei Orte kennengelernt, an denen Daten in einem Computer gespeichert werden können:
- Register — winzige Speicherboxen innerhalb der CPU
- Arbeitsspeicher (RAM) — ein riesiges Gitter aus nummerierten Steckplätzen 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, da sie sich innerhalb der CPU befinden. Der Speicher ist langsamer, da 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) |
|---|---|---|
| Speicherort | 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 Platzes | 8 Byte (64 Bit) | 1 Byte |
| Zugriffsart | Ü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 Assembler:
Die CPU kann nicht direkt mit Daten im Speicher arbeiten. Daten müssen zuerst in Register geladen werden.
Dies ist nicht optional. So ist die CPU konzipiert. Jede Addition, jeder Vergleich, jede Datenbewegung muss über ein Register erfolgen.
Das Drei-Schritte-Muster, das Sie ständig verwenden werden:
| Schritt | Was passiert | Beispiel |
|---|---|---|
| 1. LOAD | Daten aus dem Speicher in ein Register kopieren | mov rax, [count] |
| 2. WORK | Etwas mit dem Register ausführen | add rax, 5 |
| 3. STORE | Das Ergebnis zurück in den Speicher kopieren (falls erforderlich) | mov [result], rax |
Was passiert, wenn Sie diese Regel vergessen?
Wenn Sie versuchen, zwei Zahlen zu addieren, die sich beide im Speicher befinden, wird der Assembler eine Fehlermeldung ausgeben. Die CPU kann das einfach nicht. Sie müssen 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