Montagem - Segmentos de Memória

Já discutimos as três seções de um programa de montagem. Essas seções também representam vários segmentos de memória.

Curiosamente, se você substituir a palavra-chave da seção por segmento, obterá o mesmo resultado. Experimente o seguinte código -

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

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Hello, world!

Segmentos de Memória

Um modelo de memória segmentada divide a memória do sistema em grupos de segmentos independentes referenciados por ponteiros localizados nos registradores de segmento. Cada segmento é usado para conter um tipo específico de dados. Um segmento é usado para conter códigos de instrução, outro segmento armazena os elementos de dados e um terceiro segmento mantém a pilha do programa.

À luz da discussão acima, podemos especificar vários segmentos de memória como -

  • Data segment - É representado por .data seção e o .bss. A seção .data é usada para declarar a região da memória, onde os elementos de dados são armazenados para o programa. Esta seção não pode ser expandida depois que os elementos de dados são declarados e permanece estática em todo o programa.

    A seção .bss também é uma seção de memória estática que contém buffers para os dados a serem declarados posteriormente no programa. Esta memória buffer é preenchida com zeros.

  • Code segment - É representado por .textseção. Isso define uma área na memória que armazena os códigos de instrução. Esta também é uma área fixa.

  • Stack - Este segmento contém valores de dados passados ​​para funções e procedimentos dentro do programa.