MOV de Registre à Registre
Fait partie de la section Fondamentaux du Journey Assembly de Coddy — leçon 16 sur 45.
Maintenant que vous savez comment placer un nombre directement dans un registre (MOV immédiat), vous pouvez é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, les deux rax et rbx contiennent 5.
Important : Le registre source (rax) conserve sa valeur. MOV copie — il ne coupe pas et ne déplace pas.
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 sauvegarder une valeur en la copiant dans un autre registre avant de modifier l'original
- Vous pouvez réutiliser des valeurs sans avoir à les charger de nouveau depuis la mémoire
- C'est le fondement de la plupart des opérations en assembleur
Défi
Écrivez le code assembleur pour ces tâches :
- Mettez le nombre 4 dans
rax - Copiez la valeur de
raxdansrbx - Copiez la valeur de
rbxdansrcx
Après votre code, les trois registres devraient 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 MOV