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], registerKöş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], alCPU'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 saklaNot: 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:
| Kural | Açıklama |
|---|---|
| Köşeli parantezler gereklidir | mov destination, al yanlış olur |
| 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 depolar
mov [destination], alAş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.
Görev
Şunları yapmak için iki satır assembly kodu yazın:
- 9 sayısını
alyazmacına yerleştirin aliçindeki değeridestinationbellek 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
syscallBu 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