Menu
Coddy logo textTech

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 al

Vous 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ègleExplication
La source doit être une adresse mémoire[label] ou [address]
Les crochets sont obligatoiresmov al, myNumber charge l'adresse, pas la valeur
La taille doit correspondreSi 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]
challenge icon

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
    syscall
quiz iconTestez-vous

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