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 (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 al

Vous 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ègleExplication
La source doit être une memory address[label] ou [address]
Les crochets sont obligatoiresmov al, myNumber charge l’address, et non la valeur
La taille doit correspondreSi 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]
challenge icon

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
    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

Entraînez-vous par vous-même : Playground Assembly