.data Bölümü
Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 23 / 45.
2. Bölümde, değerleri bellekten yüklediniz ve belleğe değerler kaydettiniz. Peki bu bellek nereden geldi? num1, num2 ve result'ı kim oluşturdu?
Yanıt .data bölümü. Bellekte kendi verilerini oluşturduğun yer burasıdır.
.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ımlarınız buraya gelecekNeden ihtiyacın var:
| .data bölümü olmadan | .data bölümüyle |
|---|---|
| Üzerinde çalışacak verin olmaz | Sayılar, dizeler ve değişkenler oluşturabilirsin |
| Bellek adresleri bilinmez | myNumber veya message gibi etiketler kullanabilirsin |
| Kodunu test edemezsin | Oluşturduğun verileri yükleyip depolayabilirsin |
Basit bir örnek:
section .data
age db 25 ; Değeri 25 olan "age" adlı bir bayt oluştur
price dw 1000 ; Değeri 1000 olan "price" adlı bir word oluştur
name db 'Bob' ; B, o, b harflerinden oluşan "name" adlı bir dize oluşturDosyalarınızda nereye eklenir:
Bölüm 0'daki iki dosyalı yapıyı hatırlayın:
| Dosya | İçerik |
|---|---|
data.asm | Veri tanımlarınızla birlikte section .data |
main.asm | Ardından kodunuzla birlikte section .text gelen %include "data.asm" |
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
- Etiketlerin (
age,price,name) adreslere dönüşür - Kodun artık bu adreslere
[age],[price],[name]kullanarak erişebilir
Önemli kurallar:
| Kural | Açıklama |
|---|---|
| Verilerinizi bir arada tutun | section .data bölümünü birden fazla kez açabilirsiniz (birleştirici parçaları birleştirir), ancak data.asm içinde tek bir bölüm olması okumayı kolaylaştırır |
| Etiketler benzersiz olmalıdır | İki age etiketiniz olamaz |
| Veriler, kodunuz çalışmadan önce oluşturulur | _start başladığında kullanıma hazırdır |
Sonraki 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 gerçekleştirecek kodu yaz:
.databölümünü oluştur- Değeri 5 olan
countadlı bir bayt oluştur
Kendin dene
%include "data.asm"
section .text
global _start
_start:
; count içindeki değeri al içine yükle
mov al, [count]
; Yazdırmak için değeri kaydet
mov r12, rax
; ASCII'ye dönüştür ve yazdır (yalnızca 0-9)
add al, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Çıkış yap
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.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground