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ükleCPU'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:
| Kural | Açıklama |
|---|---|
| Kaynak bir bellek adresi olmalıdır | [label] veya [address] |
| Köşeli parantezler gereklidir | mov al, myNumber değeri değil, adresi yükler |
| Boyut eşleşmelidir | Bellek 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]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
syscallBu 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