Registres vs Mémoire
Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 3 sur 45.
Tu as maintenant découvert deux endroits où les données peuvent être stockées dans un ordinateur :
- Registres : de minuscules cases de stockage à l’intérieur du CPU
- Mémoire (RAM) : une immense grille d’emplacements numérotés à l’extérieur du CPU
Mais pourquoi y a-t-il deux emplacements ? Pourquoi le CPU ne garde-t-il pas tout en mémoire ?
La réponse est la vitesse. Les registres sont extrêmement rapides parce qu’ils se trouvent à l’intérieur du processeur. La mémoire est plus lente parce qu’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 CPU | À l’extérieur du CPU |
| Vitesse | Extrêmement rapide (1 cycle) | Plus lente (de nombreux 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 lorsque l’alimentation est coupée) | Oui (disparaît lorsque l’alimentation est coupée) |
La règle la plus importante en assembleur :
Une instruction peut utiliser au maximum un opérande mémoire. Pour combiner deux valeurs qui se trouvent toutes les deux en mémoire, chargez d’abord l’une d’elles dans un registre.
Les registres sont également l’endroit où tu conserves les valeurs avec lesquelles tu travailles, car chaque accès à la mémoire est lent.
Le schéma en trois étapes que tu utiliseras constamment :
| Étape | Ce qui se passe | Exemple |
|---|---|---|
| 1. LOAD | Copier des données de la mémoire dans un registre | mov rax, [count] |
| 2. WORK | Effectuer une opération sur le registre | add rax, 5 |
| 3. STORE | Recopier le résultat en mémoire (si nécessaire) | mov [result], rax |
Que se passe-t-il si tu oublies cette règle ?
Si tu essaies d’additionner deux nombres qui se trouvent tous les deux en mémoire, l’assembleur affichera une erreur. Le processeur ne peut pas le faire. Tu dois d’abord charger l’un d’eux dans un registre.
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-64Entraînez-vous par vous-même : Playground Assembly