Menu
Coddy logo textTech

MOV Yazmaçtan Yazmaca

Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 16 / 45.

Bir sayıyı doğrudan bir kaydediciye (register) nasıl yerleştireceğinizi (MOV immediate) öğrendiğinize göre, değerleri kaydediciler arasında da kopyalayabilirsiniz.

Sözdizimi:

mov destination_register, source_register

Kaynak yazmacındaki değer, hedef yazmacına kopyalanır. Kaynak yazmacı değişmeden kalır.

Örnek:

mov rax, 5      ; rax = 5
mov rbx, rax    ; rbx = 5 (rax'tan kopyalandı)

Bu iki komuttan sonra, hem rax hem de rbx 5 değerini içerir.

Önemli: Kaynak yazmaç (rax) hâlâ kendi değerine sahiptir. MOV kopyalar — kesmez veya taşımaz.

Başka bir örnek:

mov rax, 7      ; rax = 7
mov rcx, 3      ; rcx = 3
mov rdx, rcx    ; rdx = 3 (rcx'ten kopyalandı)
mov rbx, rax    ; rbx = 7 (rax'tan kopyalandı)

Bu talimatlardan sonra:

YazmaçDeğer
rax7
rcx3
rdx3
rbx7

Bunun önemi şudur:

  • Orijinalini değiştirmeden önce bir değeri başka bir kaydediciye kopyalayarak kaydedebilirsiniz
  • Değerleri bellekten tekrar yüklemeden yeniden kullanabilirsiniz
  • Bu, çoğu assembly işleminin temelidir
challenge icon

Görev

Şu görevler için assembly kodunu yazın:

  1. 4 sayısını rax içine koyun
  2. rax içindeki değeri rbx içine kopyalayın
  3. rbx içindeki değeri rcx içine kopyalayın

Kodunuzdan sonra, her üç register da 4 değerini içermelidir.

Kendin dene

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"
    
    ; Değerleri kaydet
    mov r12, rax
    mov r13, rbx
    mov r14, rcx
    
    ; "rax = " yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rax
    mov rdx, msg_rax_len
    syscall
    
    ; rax değerini yazdır
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; "rbx = " yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rbx
    mov rdx, msg_rbx_len
    syscall
    
    ; rbx değerini yazdır
    mov rax, r13
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; "rcx = " yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_rcx
    mov rdx, msg_rcx_len
    syscall
    
    ; rcx değerini yazdır
    mov rax, r14
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Çıkış
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler