Menu
Coddy logo textTech

MOV Yazmaçtan Belleğe

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

Artık verileri bellekten bir kayda nasıl yükleyeceğinizi bildiğinize göre, tersini öğreneceksiniz: verileri bir kayıttan belleğe depolamak.

Sözdizimi:

mov [address], register

Köşeli parantezler [ ] şu anlama gelir: "register'daki değeri bu bellek adresine kaydet."

Şöyle düşün:

Bunu, destination bellek adresinde boş bir kutu varmış gibi düşün. Bir yazmaçta duran bir değerin var (örneğin, al 7 sayısını içeriyor).

Şunu yazdığınızda:

mov [destination], al

CPU'ya şunu söylersiniz: "al yazmacındaki (7) değeri alın ve onu destination adlı kutuya koyun."

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. Kaldırılmaz.

Örnek:

mov al, 7            ; al register'ına 7 koy
mov [destination], al ; al'deki değeri "destination" bellek adresine sakla

Not: Bu alıştırmada, bellekteki veri 1 bayttır (8 bit). Bu nedenle al kullanıyoruz. Boyutla eşleşen 8 bitlik yazmaçtır. Yazmaç boyutları hakkında daha fazlasını ileride öğreneceksiniz.

Önemli kurallar:

KuralAçıklama
Köşeli parantezler gereklidirmov destination, al yanlış olur
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 depolar
mov [destination], al

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

challenge icon

Görev

Şunları yapmak için iki satır assembly kodu yazın:

  1. 9 sayısını al yazmacına yerleştirin
  2. al içindeki değeri destination bellek adresine depolayın

(destination bellek adresi 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 burada dahil ediliyor
    ; destination'ı VE öğrencinin MOV talimatlarını tanımlar
    
    %include "solution.asm"
    
    ; Yazdırma için bellekten saklanan değeri al'ye yükle
    mov al, [destination]
    
    ; Onu 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.

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Assembly playground