.data Bölümü
Coddy'nin Assembly Journey'sinin Temeller bölümünün bir parçası — ders 23 / 45.
Bölüm 2'de, bellekten değerler yüklediniz ve belleğe değerler kaydettiniz. Peki bu bellek nereden geldi? num1, num2 ve result değerlerini kim oluşturdu?
Cevap .data bölümüdür. Burası, bellekte kendi verilerinizi oluşturduğunuz yerdir.
.data bölümü nedir?
.data bölümü, programınız çalışmadan önce bellekte saklanacak verileri tanımladığınız assembly programınızın bir parçasıdır.
Sözdizimi:
section .data
; Veri tanımlamalarınız buraya gelirNeden buna ihtiyaç duyarsınız:
| .data bölümü olmadan | .data bölümü ile |
|---|---|
| Üzerinde çalışacak veriniz olmaz | Sayılar, dizeler ve değişkenler oluşturabilirsiniz |
| Bellek adresleri bilinmez | myNumber veya message gibi etiketler kullanabilirsiniz |
| Kodunuzu test edemezsiniz | Oluşturduğunuz verileri yükleyebilir ve saklayabilirsiniz |
Basit bir örnek:
section .data
age db 25 ; 25 değerine sahip "age" adında bir bayt oluştur
price dw 1000 ; 1000 değerine sahip "price" adında bir word oluştur
name db 'Bob' ; B, o, b harflerinden oluşan "name" adında bir dize oluşturDosyalarınızdaki yeri:
Bölüm 0'daki iki dosya desenini hatırlayın:
| Dosya | İçerik |
|---|---|
data.asm | veri tanımlamalarınızın bulunduğu section .data |
main.asm | %include "data.asm" ve ardından kodunuzun bulunduğu section .text |
Programınız çalıştığında ne olur:
- İşletim sistemi programınızı belleğe yükler
.databölümünü okur ve verilerinizi belirli bellek adreslerine yerleştirir
- Etiketleriniz (
age,price,name) adreslere dönüşür - Kodunuz artık
[age],[price],[name]kullanarak bu adreslere erişebilir
Önemli kurallar:
| Kural | Açıklama |
|---|---|
Program başına bir .data bölümü | Tüm verilerinizi tek bir yere koyun |
| Etiketler benzersiz olmalıdır | İki tane age etiketine sahip olamazsınız |
| Veriler kodunuz çalışmadan önce oluşturulur | _start başladığında kullanıma hazırdır |
Gelecek derslerde, db, dw, dd ve dq kullanarak farklı veri türlerini nasıl tanımlayacağınızı öğreneceksiniz.
Görev
data.asm dosyasına şu işlemleri yapacak kodu yazın:
.databölümünü oluşturun- 5 değerine sahip
countadında bir byte oluşturun
Kendin dene
%include "data.asm"
section .text
global _start
_start:
; count değerini al içine yükle
mov al, [count]
; Yazdırmak için kaydet
mov r12, rax
; ASCII'ye dönüştür ve yazdır (sadece 0-9)
add al, 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
section .bss
digit resb 1Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.