Montagem - Gerenciamento de Memória
o sys_brk()chamada de sistema é fornecida pelo kernel, para alocar memória sem a necessidade de movê-la posteriormente. Essa chamada aloca memória logo atrás da imagem do aplicativo na memória. Esta função do sistema permite definir o endereço mais alto disponível na seção de dados.
Esta chamada de sistema usa um parâmetro, que é o endereço de memória mais alto que precisa ser definido. Este valor é armazenado no registro EBX.
Em caso de qualquer erro, sys_brk () retorna -1 ou retorna o próprio código de erro negativo. O exemplo a seguir demonstra a alocação dinâmica de memória.
Exemplo
O programa a seguir aloca 16kb de memória usando a chamada de sistema 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
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Allocated 16 kb of memory!