Montaj - Bellek Bölümleri
Bir montaj programının üç bölümünü zaten tartışmıştık. Bu bölümler aynı zamanda çeşitli bellek bölümlerini de temsil eder.
İlginç bir şekilde, bölüm anahtar kelimesini segment ile değiştirirseniz, aynı sonucu alırsınız. Aşağıdaki kodu deneyin -
segment .text ;code segment
global _start ;must be declared for linker
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
segment .data ;data segment
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Hello, world!
Bellek Bölümleri
Parçalı bir bellek modeli, sistem belleğini, bölüm kayıtlarında bulunan işaretçiler tarafından referans verilen bağımsız bölüm gruplarına böler. Her bölüm belirli bir veri türünü içermek için kullanılır. Bir bölüm komut kodlarını içermek için kullanılır, başka bir bölüm veri elemanlarını depolar ve üçüncü bir bölüm program yığınını tutar.
Yukarıdaki tartışmanın ışığında, çeşitli bellek bölümlerini şu şekilde belirleyebiliriz:
Data segment - tarafından temsil edilir .data bölüm ve .bss. .Data bölümü, program için veri öğelerinin depolandığı bellek bölgesini bildirmek için kullanılır. Bu bölüm, veri öğeleri bildirildikten sonra genişletilemez ve program boyunca sabit kalır.
.Bss bölümü ayrıca programda daha sonra bildirilecek veriler için arabellekleri içeren statik bir bellek bölümüdür. Bu tampon bellek sıfır doludur.
Code segment - tarafından temsil edilir .textBölüm. Bu, talimat kodlarını saklayan bellekte bir alanı tanımlar. Bu aynı zamanda sabit bir alandır.
Stack - Bu segment, program içindeki işlevlere ve prosedürlere aktarılan veri değerlerini içerir.