Menu
Coddy logo textTech

MOV Bellekten Yazmaca

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

Şimdiye kadar sayıları doğrudan yazmaçlara (immediate) taşıdınız ve değerleri yazmaçlar arasında kopyaladınız. Şimdi memory içinden bir yazmaca veri yüklemeyi öğreneceksiniz.

Bu neden önemli:

Bölüm 0'dan hatırlayın: CPU doğrudan memory ile çalışamaz. data önce register'lara yüklenmelidir. Bunu şu şekilde yaparsınız.

Sözdizimi:

mov register, [address]

Köşeli parantezler [ ] şu anlama gelir: "bu bellek adresine git ve burada depolanan değeri al."

Şöyle düşün:

number bellek adresinde bir kutu olduğunu hayal et. Bu kutunun içinde bir değer, örneğin 5 sayısı var. Şunu yazdığında:

mov al, [number]    ; "number" bellek adresindeki değeri al yazmacına yükle

CPU'ya şunu söylüyorsun: "number adlı kutuya git, içinde hangi değer varsa onu al (bu durumda 5) ve al yazmacına kopyala."

Bu komut yürütüldükten sonra 5 değeri artık al içinde saklanır. number adresindeki kutunun içindeki özgün değer orada kalır. Silinmez.

Önemli kurallar:

KuralAçıklama
Kaynak bir bellek adresi olmalıdır[label] veya [address]
Köşeli parantezler gereklidirmov al, myNumber değeri değil, adresi yükler
Boyut eşleşmelidirBellek bir bayt depoluyorsa rax yerine al kullanın

Yaygın hata:

; Yanlış: myNumber'ın ADRESİNİ yükler, değeri değil
mov al, myNumber

; Doğru: myNumber'da saklanan DEĞERİ yükler
mov al, [myNumber]
challenge icon

Görev

value bellek adresindeki değeri al yazmacına yüklemek için bir assembly satırı yazın.

Kendin dene

section .data
    msg db 'al = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; Öğrencinin kodu önce çalışır (değeri al'a yükler)
    
    %include "solution.asm"
    
    ; al'deki değeri kaydet
    mov r12, rax
    
    ; "al = " yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; al'deki değeri yazdır
    mov rax, r12
    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

Kendi başına pratik yap: Assembly playground