Assembly - Quản lý bộ nhớ
Các sys_brk()lệnh gọi hệ thống được cung cấp bởi hạt nhân, để cấp phát bộ nhớ mà không cần di chuyển nó sau này. Cuộc gọi này phân bổ bộ nhớ ngay sau hình ảnh ứng dụng trong bộ nhớ. Chức năng hệ thống này cho phép bạn thiết lập địa chỉ khả dụng cao nhất trong phần dữ liệu.
Lệnh gọi hệ thống này nhận một tham số, là địa chỉ bộ nhớ cao nhất cần được thiết lập. Giá trị này được lưu trữ trong thanh ghi EBX.
Trong trường hợp có bất kỳ lỗi nào, sys_brk () trả về -1 hoặc trả về chính mã lỗi âm. Ví dụ sau minh họa cấp phát bộ nhớ động.
Thí dụ
Chương trình sau phân bổ 16kb bộ nhớ bằng cách gọi hệ thống 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
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Allocated 16 kb of memory!