Registres vs Mémoire
Fait partie de la section Fondamentaux du Journey Assembly de Coddy — leçon 3 sur 45.
Vous avez maintenant découvert deux endroits où les données peuvent résider à l'intérieur d'un ordinateur :
- Registres — de minuscules boîtes de stockage à l'intérieur du CPU
- Mémoire (RAM) — une grille géante d'emplacements numérotés à l'extérieur du CPU
Mais pourquoi y a-t-il deux emplacements ? Pourquoi le processeur ne peut-il pas simplement travailler directement avec la mémoire ?
La réponse est la vitesse. Les registres sont extrêmement rapides car ils se trouvent à l'intérieur du processeur. La mémoire est plus lente car elle se trouve à l'extérieur. Le processeur peut accéder à un registre en un seul cycle, mais l'accès à la mémoire prend beaucoup plus de temps.
Comparaison côte à côte :
| Caractéristique | Registres | Mémoire (RAM) |
|---|---|---|
| Emplacement | À l'intérieur du processeur (CPU) | À l'extérieur du processeur (CPU) |
| Vitesse | Extrêmement rapide (1 cycle) | Plus lente (plusieurs cycles) |
| Nombre d'emplacements de stockage | Très peu (16-32 sur x86-64) | Des millions ou des milliards |
| Taille de chaque emplacement | 8 octets (64 bits) | 1 octet |
| Comment y accéder | Par nom (rax, rbx, rcx...) | Par adresse (1000, msg, buffer) |
| Volatile ? | Oui (disparaît lors de la mise hors tension) | Oui (disparaît lors de la mise hors tension) |
La règle la plus importante en assembleur :
Le processeur ne peut pas travailler directement avec des données en mémoire. Les données doivent d'abord être chargées dans des registres.
Ce n'est pas facultatif. C'est ainsi que le processeur est conçu. Chaque addition, chaque comparaison, chaque déplacement de données doit passer par un registre.
Le modèle en trois étapes que vous utiliserez constamment :
| Étape | Ce qui se passe | Exemple |
|---|---|---|
| 1. CHARGER (LOAD) | Copier les données de la mémoire vers un registre | mov rax, [count] |
| 2. TRAVAILLER (WORK) | Effectuer une opération avec le registre | add rax, 5 |
| 3. STOCKER (STORE) | Copier le résultat en mémoire (si nécessaire) | mov [result], rax |
Que se passe-t-il si vous oubliez cette règle ?
Si vous essayez d'additionner deux nombres qui sont tous deux en mémoire, l'assembleur vous donnera une erreur. Le processeur ne peut tout simplement pas le faire. Vous devez d'abord les charger dans des registres.
Essayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1La Machine
Qu'est-ce qu'un CPULa mémoireRegistres vs MémoireFonctionnement des instructionsLe modèle à deux fichiersL'architecture x86-64