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.