مدیریت حافظه در زبان اسمبلی – آموزش Assembly

assembly memory management 4622 تصویر

مدیریت حافظه در زبان اسمبلی

فراخوان سیستم 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 اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *