Perakitan - Manajemen Memori
Itu sys_brk()panggilan sistem disediakan oleh kernel, untuk mengalokasikan memori tanpa perlu memindahkannya nanti. Panggilan ini mengalokasikan memori tepat di belakang gambar aplikasi di memori. Fungsi sistem ini memungkinkan Anda untuk mengatur alamat tertinggi yang tersedia di bagian data.
Panggilan sistem ini menggunakan satu parameter, yaitu alamat memori tertinggi yang perlu disetel. Nilai ini disimpan di register EBX.
Jika terjadi kesalahan, sys_brk () mengembalikan -1 atau mengembalikan kode kesalahan negatif itu sendiri. Contoh berikut menunjukkan alokasi memori dinamis.
Contoh
Program berikut mengalokasikan memori 16kb menggunakan panggilan sistem 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
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Allocated 16 kb of memory!