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 (immédiat) et copié des valeurs entre les registres. Maintenant, vous allez apprendre comment charger des données depuis la mémoire dans un registre.
Pourquoi c'est important :
Souvenez-vous du Chapitre 0 : le CPU ne peut pas travailler directement avec la mémoire. Les données doivent d'abord être chargées dans des registres. Voici comment faire.
Syntaxe :
mov register, [address]Les crochets [ ] signifient : « allez à cette adresse mémoire et récupérez la valeur qui y est stockée. »
Voyez les choses ainsi :
Imaginez qu'à l'adresse mémoire number il y a une boîte. À l'intérieur de cette boîte se trouve une valeur, par exemple le nombre 5. Lorsque vous écrivez :
mov al, [number] ; Charge la valeur de l'adresse mémoire "number" dans alVous dites au processeur : « Allez à la boîte appelée number, prenez la valeur qui s'y trouve (dans ce cas 5), et copiez-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 à l'intérieur de 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 adresse mémoire | [label] ou [address] |
| Les crochets sont obligatoires | mov al, myNumber charge l'adresse, pas la valeur |
| La taille doit correspondre | Si la mémoire stocke un octet, utilisez al (pas rax) |
Erreur courante :
; Erreur : 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'assembleur pour charger la valeur de 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 en premier (charge la valeur dans al)
%include "solution.asm"
; Sauvegarder la valeur de al
mov r12, rax
; Afficher "al = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Afficher 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 MOV