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], registerKöş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], alCPU'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 kaydetNot: 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:
| Kural | Açıklama |
|---|---|
| Köşeli parantezler gereklidir | mov destination, al yanlış olurdu |
| Hedef bir bellek adresi olmalıdır | [destination] gibi bir etiket kullanın |
| Boyut eşleşmelidir | Bu 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], alAş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.
Görev
Aşağıdakileri yapmak için iki satır assembly kodu yazın:
- 9 sayısını
alyazmacına (register) koyun aliçindeki değeridestinationbellek 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
syscallBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.