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.