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 vous savez comment charger des données depuis la mémoire dans un registre, vous allez apprendre l'inverse : stocker des données d'un registre vers la mémoire.
Syntaxe :
mov [address], registerLes crochets [ ] signifient : « stocker la valeur du registre à cette adresse mémoire. »
Voyez les choses ainsi :
Imaginez qu'à l'adresse mémoire destination il y a une boîte vide. Vous avez une valeur située dans un registre (par exemple, al contient le nombre 7).
Lorsque vous écrivez :
mov [destination], alVous dites au processeur : « Prenez la valeur du registre al (7) et placez-la dans la boîte appelée destination. »
Après l'exécution de cette instruction, l'adresse mémoire destination contient désormais 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 donnée en mémoire est de 1 octet (8 bits). C'est pourquoi nous utilisons al — c'est le registre de 8 bits qui correspond à la taille. Vous en apprendrez davantage sur les tailles de registres plus tard.
Règles importantes :
| Règle | Explication |
|---|---|
| Les crochets sont obligatoires | mov destination, al serait incorrect |
| La destination doit être une adresse mémoire | Utilisez une étiquette comme [destination] |
| La taille doit correspondre | Pour cet exercice, utilisez al (8 bits) |
Erreur courante :
; Erreur : 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 vous. Vous apprendrez comment créer vos propres données au Chapitre 3. Pour l'instant, concentrez-vous simplement sur l'instruction MOV.
Défi
Écrivez deux lignes d'assembleur 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"
; Charger la valeur stockée depuis la mémoire dans al pour l'affichage
mov al, [destination]
; La sauvegarder
mov r12, rax
; Afficher "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Afficher 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 MOV