مدیریت حافظه در زبان اسمبلی
فراخوان سیستم sys_brk() که توسط هسته ارائه (kernel) می شود، برای تخصیص حافظه پویا استفاده می شود. این فراخوان درست در پشت تصویر برنامه، حافظه را اختصاص می دهد. این تابع سیستمی امکان تنظیم بیشترین آدرس موجود در بخش data را فراهم می کند.
sys_brk() یک پارامتر می گیرد که بالاترین آدرس حافظه مورد نیاز برای تنظیم شدن را مشخص می کند. این مقدار در ثبات EBX ذخیره می شود. sys_brk() در صورت بروز خطا، مقدار -۱ یا یک عدد منفی که نشان دهنده کد خطا است را باز می گرداند. مثال زیر نحوه تخصیص حافظه پویا در اسمبلی را نشان می دهد:
مثال
برنامه زیر، ۱۶ کیلوبایت حافظه را با استفاده از 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
امتحان کنید
زمانی که کد بالا توسط کامپایلر اسمبلی اجرا شود، نتیجه زیر را تولید خواهد کرد:
Allocated 16 kb of memory!
نوشته مدیریت حافظه در زبان اسمبلی – آموزش Assembly اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.