همراهان عزیز وب سایت آموزشی پی وی لرن وقتتون بخیر و شادی، با آموزش زبان برنامه نویسی اسمبلی (Assembly) در خدمتتون خواهیم بود. در بخش آخر با مدیریت حافظه در زبان اسمبلی (Assembly) آشنا می شویم. با ما همراه باشید.
فراخوان سیستم ()sys_brk توسط هسته ارائه می شود تا بتواند حافظه پویا را تخصیص دهد. در این فراخوان حافظه درست پشت تصویر برنامه حافظه را اختصاص می یابد. این تابع سیستمی به شما امکان می دهد بالاترین آدرس موجود را در بخش داده را تنظیم کنید.
این فراخوان سیستمی یک پارامتر می گیرد ، که بالاترین آدرس حافظه مورد نیاز برای تنظیم است. این مقدار در ثبات EBX ذخیره می شود.
()sys_brk در صورت بروز هر گونه خطا ۱- را برمی گرداند یا یک عدد منفی کد نشان دهند خطا است را برمی گرداند. مثال زیر تخصیص حافظه پویا را نشان می دهد.
برنامه ی زیر،۱۶ کیلو بایت حافظه را با استفاده از sys_brk() تخصیص می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | Live Demo 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 |
هنگامی که کد فوق کامپایل و اجرا شد ، نتیجه زیر را ایجاد می کند.
1 | Allocated 16 kb of memory! |
در بخش آخر مبحث آموزش زبان اسمبلی (Assembly) با مدیریت حافظه در زبان اسمبلی (Assembly) آشنا شدیم. متشکریم که با این مباحث همراه بودید. با سایر آموزش ها از وب سایت آموزشی پی وی لرن همراه باشید.