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!