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!