Perakitan - Segmen Memori

Kami telah membahas tiga bagian dari program perakitan. Bagian ini juga mewakili berbagai segmen memori.

Menariknya, jika Anda mengganti kata kunci bagian dengan segmen, Anda akan mendapatkan hasil yang sama. Coba kode berikut -

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

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Hello, world!

Segmen Memori

Model memori tersegmentasi membagi memori sistem ke dalam grup segmen independen yang direferensikan oleh pointer yang terletak di register segmen. Setiap segmen digunakan untuk memuat jenis data tertentu. Satu segmen digunakan untuk memuat kode instruksi, segmen lain menyimpan elemen data, dan segmen ketiga menyimpan tumpukan program.

Berdasarkan pembahasan di atas, kita dapat menentukan berbagai segmen memori sebagai -

  • Data segment - Ini diwakili oleh .data bagian dan .bss. Bagian .data digunakan untuk mendeklarasikan wilayah memori, tempat elemen data disimpan untuk program. Bagian ini tidak dapat diperluas setelah elemen data dideklarasikan, dan tetap statis di seluruh program.

    Bagian .bss juga merupakan bagian memori statis yang berisi buffer untuk data yang akan dideklarasikan nanti dalam program. Memori buffer ini terisi nol.

  • Code segment - Ini diwakili oleh .textbagian. Ini mendefinisikan area dalam memori yang menyimpan kode instruksi. Ini juga merupakan area tetap.

  • Stack - Segmen ini berisi nilai data yang diteruskan ke fungsi dan prosedur dalam program.