MOV d'un Registre vers la Mémoire
Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 18 sur 45.
Maintenant que tu sais comment charger des données depuis la mémoire dans un registre, tu vas apprendre l’inverse : stocker des données d’un registre dans la mémoire.
Syntaxe :
mov [address], registerLes crochets [ ] signifient : « store la valeur du registre dans cette adresse mémoire. »
Imagine cela ainsi :
Imagine qu’à l’adresse mémoire destination se trouve une boîte vide. Tu as une valeur stockée dans un registre (par exemple, al contient le nombre 7).
Lorsque vous écrivez :
mov [destination], alVous dites au CPU : « Prenez la valeur du registre al (7) et mettez-la dans la boîte appelée destination. »
Après l’exécution de cette instruction, l’adresse mémoire destination contient maintenant la valeur 7. La valeur dans al y reste. Elle n’est pas supprimée.
Exemple :
mov al, 7 ; Mettre 7 dans le registre al
mov [destination], al ; Stocker la valeur de al dans l'adresse mémoire "destination"Remarque : Dans cet exercice, la data en mémoire fait 1 octet (8 bits). C’est pourquoi nous utilisons al. Il s’agit du registre de 8 bits qui correspond à la taille. Vous en apprendrez davantage sur les tailles des register plus tard.
Règles importantes :
| Règle | Explication |
|---|---|
| Les brackets sont obligatoires | mov destination, al serait incorrect |
| La destination doit être une adresse mémoire | Utilisez un label comme [destination] |
| La taille doit correspondre | Pour cet exercice, utilisez al (8 bits) |
Erreur fréquente :
; Incorrect : crochets manquants
mov destination, al
; Correct : stocke la valeur en mémoire
mov [destination], alDans le défi ci-dessous, l’adresse mémoire destination est déjà créée pour toi. Tu apprendras à créer tes propres données au chapitre 3. Pour l’instant, concentre-toi simplement sur l’instruction MOV.
Défi
Écrivez deux lignes d’assembly pour :
- Mettre le nombre 9 dans le registre
al - Stocker la valeur de
alà l’adresse mémoiredestination
(L’adresse mémoire destination est déjà créée pour vous.)
Essayez vous-même
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; solution.asm est inclus ici
; Il définit destination ET les instructions MOV de l'étudiant
%include "solution.asm"
; Charge la valeur stockée depuis la mémoire dans al pour l'affichage
mov al, [destination]
; Sauvegarde-le
mov r12, rax
; Affiche "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Affiche la valeur
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Quitter
mov rax, 60
mov rdi, 0
syscallCette 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-643Première instruction - MOV
Qu'est-ce que MOV ?MOV ImmédiatMOV de Registre à RegistreMOV de la Mémoire vers un RegistreMOV d'un Registre vers la MémoireLEA - Charger l'adresseMOV avec différentes taillesPratique : Échanger des registresRécapitulatif : Défi MOVEntraînez-vous par vous-même : Playground Assembly