鍍金池/ 教程/ Java/ Assembly匯編 內(nèi)存管理
Assembly 變量聲明
Assembly匯編 STOS指令
Assembly 條件
Assembly 尋址模式和MOV指令
Assembly匯編教程
Assembly - 什么是匯編語言
Assembly 循環(huán)
Assembly 內(nèi)存段
Assembly匯編 宏
Assembly 寄存器
Assembly匯編 遞歸
Assembly匯編 CMPS指令
Assembly匯編 內(nèi)存管理
Assembly匯編 LODS指令
Assembly 基本語法
Assembly匯編 過程
Assembly匯編 文件管理
Assembly匯編 數(shù)組
Assembly匯編 SCAS指令
Assembly 算術(shù)指令
Assembly 環(huán)境設(shè)置
Assembly匯編 字符串處理
Assembly 數(shù)字
Assembly 常量
Assembly匯編 MOVS指令
Assembly 邏輯指令
Assembly 系統(tǒng)調(diào)用

Assembly匯編 內(nèi)存管理

由內(nèi)核提供的sys_brk()系統(tǒng)調(diào)用,分配內(nèi)存而無需移除。這個(gè)調(diào)用應(yīng)用圖像存儲(chǔ)在內(nèi)存分配內(nèi)存后面。本系統(tǒng)功能允許您設(shè)置的最高的可用地址的數(shù)據(jù)部分。

這個(gè)系統(tǒng)調(diào)用需要一個(gè)參數(shù),這是最高的內(nèi)存地址需要設(shè)置。這個(gè)值被存儲(chǔ)在EBX寄存器。

任何錯(cuò)誤的情況下sys_brk()返回-1或返回負(fù)的錯(cuò)誤代碼本身。下面的例子演示了動(dòng)態(tài)內(nèi)存分配。

例子:

下面的程序分配16KB內(nèi)存使用sys_brk()系統(tǒng)調(diào)用:

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

上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:

Allocated 16 kb of memory!