Assemblage - Gestion de la mémoire
le sys_brk()l'appel système est fourni par le noyau, pour allouer de la mémoire sans avoir besoin de la déplacer plus tard. Cet appel alloue de la mémoire juste derrière l'image de l'application dans la mémoire. Cette fonction système vous permet de définir l'adresse disponible la plus élevée dans la section des données.
Cet appel système prend un paramètre, qui est l'adresse mémoire la plus élevée à définir. Cette valeur est stockée dans le registre EBX.
En cas d'erreur, sys_brk () renvoie -1 ou renvoie le code d'erreur négatif lui-même. L'exemple suivant illustre l'allocation de mémoire dynamique.
Exemple
Le programme suivant alloue 16 Ko de mémoire à l'aide de l'appel système sys_brk () -
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov eax, 45 ;sys_brk
xor ebx, ebx
int 80h
add eax, 16384 ;number of bytes to be reserved
mov ebx, eax
mov eax, 45 ;sys_brk
int 80h
cmp eax, 0
jl exit ;exit, if error
mov edi, eax ;EDI = highest available address
sub edi, 4 ;pointing to the last DWORD
mov ecx, 4096 ;number of DWORDs allocated
xor eax, eax ;clear eax
std ;backward
rep stosd ;repete for entire allocated area
cld ;put DF flag to normal state
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, len
int 80h ;print a message
exit:
mov eax, 1
xor ebx, ebx
int 80h
section .data
msg db "Allocated 16 kb of memory!", 10
len equ $ - msg
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -
Allocated 16 kb of memory!