位置:首頁 > 高級語言 > Assembly彙編 > Assembly彙編 內存管理

Assembly彙編 內存管理

由內核提供的sys_brk()係統調用,分配內存而無需移除。這個調用應用圖像存儲在內存分配內存後麵。本係統功能允許您設置的最高的可用地址的數據部分。

這個係統調用需要一個參數,這是最高的內存地址需要設置。這個值被存儲在EBX寄存器。

任何錯誤的情況下sys_brk()返回-1或返回負的錯誤代碼本身。下麵的例子演示了動態內存分配。

例子:

下麵的程序分配16KB內存使用sys_brk()係統調用:

section	.text
    global _start         ;must be declared for using gcc
_start:	;tell linker entry yiibai

	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		;yiibaiing 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

上麵的代碼編譯和執行時,它會產生以下結果:

Allocated 16 kb of memory!