MOV de Registre à Registre
Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 16 sur 45.
Maintenant que tu sais comment placer directement un nombre dans un registre (MOV immédiat), tu peux également copier des valeurs entre les registres.
Syntaxe :
mov destination_register, source_registerLa valeur du registre source est copiée dans le registre destination. Le registre source reste inchangé.
Exemple :
mov rax, 5 ; rax = 5
mov rbx, rax ; rbx = 5 (copié depuis rax)Après ces deux instructions, rax et rbx contiennent tous deux 5.
Important : Le registre source (rax) conserve sa valeur. MOV copie : il ne coupe pas et ne déplace pas.
Un autre exemple :
mov rax, 7 ; rax = 7
mov rcx, 3 ; rcx = 3
mov rdx, rcx ; rdx = 3 (copié depuis rcx)
mov rbx, rax ; rbx = 7 (copié depuis rax)Après ces instructions :
| Registre | Valeur |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
Pourquoi c’est important :
- Vous pouvez enregistrer une valeur en la copiant dans un autre registre avant de modifier l’originale
- Vous pouvez réutiliser values sans les charger à nouveau depuis la mémoire
- C’est le fondement de la plupart des opérations d’assemblage
Défi
Écrivez le code assembleur pour ces tâches :
- Placez le nombre 4 dans
rax - Copiez la valeur de
raxdansrbx - Copiez la valeur de
rbxdansrcx
Après votre code, les trois registres doivent contenir 4.
Essayez vous-même
section .data
msg_rax db 'rax = '
msg_rax_len equ $ - msg_rax
msg_rbx db 'rbx = '
msg_rbx_len equ $ - msg_rbx
msg_rcx db 'rcx = '
msg_rcx_len equ $ - msg_rcx
section .bss
digit resb 1
section .text
global _start
_start:
%include "solution.asm"
; Sauvegarder les valeurs
mov r12, rax
mov r13, rbx
mov r14, rcx
; Afficher "rax = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rax
mov rdx, msg_rax_len
syscall
; Afficher la valeur de rax
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Afficher "rbx = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rbx
mov rdx, msg_rbx_len
syscall
; Afficher la valeur de rbx
mov rax, r13
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Afficher "rcx = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rcx
mov rdx, msg_rcx_len
syscall
; Afficher la valeur de rcx
mov rax, r14
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