Menu
Coddy logo textTech

MOV Yazmaçtan Belleğe

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

Veriyi bellekten bir kaydediciye (register) nasıl yükleyeceğinizi bildiğinize göre, şimdi tam tersini öğreneceksiniz: veriyi bir kaydediciden belleğe depolamak.

Sözdizimi:

mov [address], register

Köşeli parantezler [ ] şu anlama gelir: "kaydedicideki değeri bu bellek adresine sakla."

Şöyle düşünün:

destination bellek adresinde boş bir kutu olduğunu hayal edin. Bir yazmaçta duran bir değeriniz var (örneğin, al 7 sayısını içeriyor).

Şunu yazdığınızda:

mov [destination], al

CPU'ya şunu söylüyorsunuz: "al kaydındaki (7) değeri al ve destination adlı kutuya koy."

Bu komut yürütüldükten sonra, destination bellek adresi artık 7 değerini içerir. al içindeki değer orada kalır — silinmez.

Örnek:

mov al, 7            ; 7 değerini al yazmacına koy
mov [destination], al ; al'deki değeri "destination" bellek adresine kaydet

Not: Bu alıştırmada, bellekteki veri 1 bayttır (8 bit). Bu yüzden al kullanıyoruz — boyuta uyan 8 bitlik kaydedicidir. Kaydedici boyutları hakkında daha fazlasını daha sonra öğreneceksiniz.

Önemli kurallar:

KuralAçıklama
Köşeli parantezler gereklidirmov destination, al yanlış olurdu
Hedef bir bellek adresi olmalıdır[destination] gibi bir etiket kullanın
Boyut eşleşmelidirBu alıştırma için al (8 bit) kullanın

Yaygın hata:

; Yanlış: eksik köşeli parantezler
mov destination, al

; Doğru: değeri belleğe kaydeder
mov [destination], al

Aşağıdaki görevde, destination bellek adresi sizin için zaten oluşturuldu. Kendi verilerinizi nasıl oluşturacağınızı Bölüm 3'te öğreneceksiniz. Şimdilik sadece MOV komutuna odaklanın.

challenge icon

Görev

Aşağıdakileri yapmak için iki satır assembly kodu yazın:

  1. 9 sayısını al yazmacına (register) koyun
  2. al içindeki değeri destination bellek adresine kaydedin

(Bellek adresi destination sizin için zaten oluşturulmuştur.)

Kendin dene

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

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; solution.asm buraya dahil edilir
    ; destination değişkenini VE öğrencinin MOV talimatlarını tanımlar
    
    %include "solution.asm"
    
    ; Yazdırmak için bellekte saklanan değeri al kaydına yükle
    mov al, [destination]
    
    ; Değeri kaydet
    mov r12, rax
    
    ; "destination = " yazdır
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; 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