MOV de la Mémoire vers un Registre
Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 17 sur 45.
Jusqu’à présent, vous avez déplacé des nombres directement dans des registres (valeurs immédiates) et copié des valeurs entre des registres. Vous allez maintenant apprendre à charger des données depuis la memory dans un registre.
Pourquoi c’est important :
Souviens-toi du chapitre 0 : le CPU ne peut pas travailler directement avec la mémoire. Les données doivent d’abord être chargées dans les registres. Voici comment faire.
Syntaxe :
mov register, [address]Les crochets [ ] signifient : « aller à cette adresse mémoire et obtenir la valeur qui y est stockée. »
Imagine cela ainsi :
Imagine qu’à l’adresse mémoire number se trouve une boîte. À l’intérieur de cette boîte se trouve une valeur, par exemple le nombre 5. Lorsque tu écris :
mov al, [number] ; Charge la valeur de l'adresse mémoire "number" dans alVous dites au CPU : « Va à la boîte appelée number, prends la valeur qui se trouve à l’intérieur (dans ce cas, 5) et copie-la dans le registre al. »
Une fois cette instruction exécutée, la valeur 5 est maintenant stockée dans al. La valeur d’origine qui se trouve dans la boîte à l’adresse number y reste. Elle n’est pas supprimée.
Règles importantes :
| Règle | Explication |
|---|---|
| La source doit être une memory address | [label] ou [address] |
| Les crochets sont obligatoires | mov al, myNumber charge l’address, et non la valeur |
| La taille doit correspondre | Si memory stocke un octet, utilisez al (et non rax) |
Erreur courante :
; Faux : charge l'ADRESSE de myNumber, pas la valeur
mov al, myNumber
; Correct : charge la VALEUR stockée à myNumber
mov al, [myNumber]Défi
Écrivez une ligne d’assembly pour charger la valeur depuis l’adresse mémoire value dans le registre al.
Essayez vous-même
section .data
msg db 'al = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; Le code de l'étudiant s'exécute d'abord (charge la valeur dans al)
%include "solution.asm"
; Sauvegarde la valeur de al
mov r12, rax
; Affiche "al = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Affiche la valeur dans al
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