Menu
Coddy logo textTech

MOV da registro a registro

Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 16 di 45.

Ora che sai come inserire direttamente un numero in un registro (MOV immediato), puoi anche copiare i valori tra i registri.

Sintassi:

mov destination_register, source_register

Il valore del registro source viene copiato nel registro destination. Il registro di origine rimane invariato.

Esempio:

mov rax, 5      ; rax = 5
mov rbx, rax    ; rbx = 5 (copiato da rax)

Dopo queste due istruzioni, sia rax sia rbx contengono 5.

Importante: Il registro sorgente (rax) conserva ancora il suo valore. MOV copia: non taglia né sposta.

Un altro esempio:

mov rax, 7      ; rax = 7
mov rcx, 3      ; rcx = 3
mov rdx, rcx    ; rdx = 3 (copiato da rcx)
mov rbx, rax    ; rbx = 7 (copiato da rax)

Dopo queste istruzioni:

RegistroValore
rax7
rcx3
rdx3
rbx7

Perché è importante:

  • Puoi salvare un valore copiandolo in un altro registro prima di modificare l'originale
  • Puoi riutilizzare i valori senza caricarli di nuovo dalla memoria
  • Questa è la base della maggior parte delle operazioni in assembly
challenge icon

Sfida

Scrivi il codice assembly per queste attività:

  1. Inserisci il numero 4 in rax
  2. Copia il valore da rax in rbx
  3. Copia il valore da rbx in rcx

Al termine del tuo codice, tutti e tre i registri dovrebbero contenere 4.

Provalo tu

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"
    
    ; Salva i valori
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; Stampa "rax = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; Stampa il valore di rax
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Stampa "rbx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; Stampa il valore di rbx
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Stampa "rcx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; Stampa il valore di rcx
    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Esci
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly