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!
本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 内存管理
本文地址:http://www.codeinn.net/assembly/1021.html
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 内存管理
本文地址:http://www.codeinn.net/assembly/1021.html