Menu
Coddy logo textTech

MOV między rejestrami

Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 16 z 45.

Teraz, gdy wiesz już, jak bezpośrednio umieścić liczbę w rejestrze (MOV immediate), możesz także kopiować wartości między rejestrami.

Składnia:

mov destination_register, source_register

Wartość z rejestru źródłowego zostaje skopiowana do rejestru docelowego. Rejestr źródłowy pozostaje bez zmian.

Przykład:

mov rax, 5      ; rax = 5
mov rbx, rax    ; rbx = 5 (skopiowano z rax)

Po tych dwóch instrukcjach zarówno rax, jak i rbx zawierają 5.

Ważne: Rejestr źródłowy (rax) nadal przechowuje swoją wartość. MOV kopiuje — nie wycina ani nie przenosi.

Kolejny przykład:

mov rax, 7      ; rax = 7
mov rcx, 3      ; rcx = 3
mov rdx, rcx    ; rdx = 3 (skopiowane z rcx)
mov rbx, rax    ; rbx = 7 (skopiowane z rax)

Po tych instrukcjach:

RejestrWartość
rax7
rcx3
rdx3
rbx7

Dlaczego to ważne:

  • Możesz zapisać wartość, kopiując ją do innego rejestru, zanim zmienisz oryginał
  • Możesz ponownie używać wartości bez ponownego wczytywania ich z pamięci
  • To podstawa większości operacji w asemblerze
challenge icon

Wyzwanie

Napisz kod asemblera wykonujący te zadania:

  1. Umieść liczbę 4 w rax
  2. Skopiuj wartość z rax do rbx
  3. Skopiuj wartość z rbx do rcx

Po wykonaniu kodu wszystkie trzy rejestry powinny zawierać 4.

Spróbuj swoich sił

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"
    
    ; Zapisz wartości
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; Wypisz "rax = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; Wypisz wartość rax
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Wypisz "rbx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; Wypisz wartość rbx
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Wypisz "rcx = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; Wypisz wartość rcx
    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Zakończ program
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly