Сборка - сегменты памяти

Мы уже обсудили три раздела программы сборки. Эти разделы также представляют различные сегменты памяти.

Интересно, что если вы замените ключевое слово section на segment, вы получите тот же результат. Попробуйте следующий код -

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

Когда приведенный выше код компилируется и выполняется, он дает следующий результат:

Hello, world!

Сегменты памяти

Модель сегментированной памяти делит системную память на группы независимых сегментов, на которые ссылаются указатели, расположенные в регистрах сегментов. Каждый сегмент используется для содержания определенного типа данных. Один сегмент используется для хранения кодов инструкций, другой сегмент хранит элементы данных, а третий сегмент хранит программный стек.

В свете приведенного выше обсуждения мы можем указать различные сегменты памяти как -

  • Data segment - Он представлен .data раздел и .bss. Раздел .data используется для объявления области памяти, в которой хранятся элементы данных для программы. Этот раздел не может быть расширен после объявления элементов данных, и он остается статичным на протяжении всей программы.

    Раздел .bss также является разделом статической памяти, который содержит буферы для данных, которые будут объявлены позже в программе. Эта буферная память заполнена нулями.

  • Code segment - Он представлен .textраздел. Это определяет область в памяти, в которой хранятся коды инструкций. Это тоже фиксированная область.

  • Stack - Этот сегмент содержит значения данных, передаваемые функциям и процедурам в программе.