Assemblage - Segments de mémoire

Nous avons déjà discuté des trois sections d'un programme d'assemblage. Ces sections représentent également divers segments de mémoire.

Fait intéressant, si vous remplacez le mot-clé de section par segment, vous obtiendrez le même résultat. Essayez le code suivant -

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

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Hello, world!

Segments de mémoire

Un modèle de mémoire segmentée divise la mémoire système en groupes de segments indépendants référencés par des pointeurs situés dans les registres de segments. Chaque segment est utilisé pour contenir un type spécifique de données. Un segment est utilisé pour contenir des codes d'instructions, un autre segment stocke les éléments de données et un troisième segment conserve la pile de programmes.

À la lumière de la discussion ci-dessus, nous pouvons spécifier divers segments de mémoire comme -

  • Data segment - Il est représenté par .data section et le .bss. La section .data est utilisée pour déclarer la région mémoire, où les éléments de données sont stockés pour le programme. Cette section ne peut pas être développée une fois les éléments de données déclarés et elle reste statique tout au long du programme.

    La section .bss est également une section de mémoire statique qui contient des tampons pour les données à déclarer plus tard dans le programme. Cette mémoire tampon est remplie de zéro.

  • Code segment - Il est représenté par .textsection. Ceci définit une zone en mémoire qui stocke les codes d'instructions. C'est aussi une zone fixe.

  • Stack - Ce segment contient des valeurs de données transmises aux fonctions et procédures du programme.