Wieder aus Coddy erweitert
This commit is contained in:
@@ -52,3 +52,43 @@ Die CPU kann die Daten an der Adresse 1000 anfordern, und der Speicher gibt sie
|
||||
| Der Speicher ist flüchtig | Wenn du den Computer ausschaltest, verschwindet alles im RAM |
|
||||
| Lesen zerstört keine Daten | Du kannst die Adresse 1000 eine Million Mal lesen, und sie enthält weiterhin denselben Wert |
|
||||
| Schreiben überschreibt alte Daten | Wenn du neue Daten an die Adresse 1000 schreibst, sind die alten Daten für immer verschwunden |
|
||||
|
||||
### Register vs. Speicher
|
||||
|
||||
Du hast nun etwas über zwei Orte gelernt, an denen Daten in einem Computer gespeichert werden können:
|
||||
|
||||
- **Register**: winzige Speicherplätze innerhalb der CPU
|
||||
- **Memory (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 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.
|
||||
|
||||
**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 bei x86-64) | Millionen oder Milliarden |
|
||||
| Größe jedes Speicherplatzes | 8 Byte (64 Bit) | 1 Byte |
|
||||
| Wie du auf sie zugreifst | Nach Namen (`rax`, `rbx`, `rcx`...) | Nach Adresse (`1000`, `msg`, `buffer`) |
|
||||
| Flüchtig? | Ja (verschwindet bei ausgeschaltetem Gerät) | Ja (verschwindet bei ausgeschaltetem Gerät) |
|
||||
|
||||
**Die wichtigste Regel in Assembly:**
|
||||
|
||||
> **Die CPU kann nicht direkt mit Daten im memory 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 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 result zurück in den Speicher 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 tun. Du musst sie zuerst in Register laden.
|
||||
|
||||
Reference in New Issue
Block a user