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