abc Asembler - elektronski priručnik
XXI dio Upravljanje memorijom
Upravljanje memorijom
Sistemski poziv sys_brk() je obezbijedio kernel, da bi alocirao memoriju bez potrebe za njenim kasnijim pomjeranjem. Ovaj poziv alocira memoriju tačno iza slike aplikacije u memoriji. Ova sistemska funkcija dozvoljava nam da postavimo najvišu raspoloživu adresu u data sekciji.
Ovaj sistemski poziv uzima jedan parametar, koji je najviša memorijska adresa koja treba biti postavljena. Ova vrijednost je spremljena u EBX registar.
U slučaju bilo kakve greške, sys_brk() vraća -1 ili vraća sam negativni kod greške. Sljedeći primjer demonstrira dinamičku alokaciju memorije.
Primjer
Sljedeći program alocira 16kb memorije pomoću sys_brk() sistemskog poziva:
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 "Alocirano 16 kb memorije!", 10
len equ $ - msg
Kada se gore navedeni kod kompajlira i izvrši, on će proizvesti sljedeći rezultat:
Alocirano 16 kb memorije!
Ažuriranje fajla < Index
|
 |