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.