دلیل استفاده از رجیستر BP در اسمبلی

HO3EINBABAIE

New Member
4.PNG
سلام دلیل استفاده از رجیستر BP در اسمبلی در ورودی آرگومانها چی هستش ؟
 

the_king

مدیرکل انجمن
مشاهده پیوست 114705
سلام دلیل استفاده از رجیستر BP در اسمبلی در ورودی آرگومانها چی هستش ؟
پشته یک سگمنت داره که SS ئه. و یک آفست شروع پشته داره که BP ئه و یک آفست انتهای پشته داره که SP ئه.
مقادیر در آدرس SP ئه PUSH و POP میشه که وقتی پشته خالی باشه بیشترین فاصله رو از BP داره.
هر چقدر که داده بیشتری در پشته قرار بگیره SP به BP نزدیکتر میشه، یعنی مقدارش با هر PUSH کمتر میشه.
وقتی SP به BP رسید دیگه پشته کامل پر شده.
با هر POP مقدار SP افزایش پیدا میکنه و از BP دور میشه.
میدونیم که مقادیر در آدرس SP ئه PUSH و POP می شوند پس گزینه الف نمیتونه درست باشه.
وقتی برای خواندن آرگومان های ورودی در تابع از BP استفاده میشه، اتفاقا مقدار SP ئه که مبنا است و به BP منتقل میشه، برای همین گزینه ج نمیتونه درست باشه :
کد:
MYPROC:
    PUSH    BP
    MOV     BP, SP
    .
    .
    .
گزینه ب میتونه درست باشه ولی توضیح خوبی نیست. دلیل اصلی اینه که قبل از فراخوانی روال، آرگومان ها در نزدیکی SP قرار گرفته اند چون بالای پشته PUSH شده اند، ولی در داخل روال در هنگام قرار گرفتن و برداشتن مقدار از پشته موقعیت SP هی تغییر می کنه و برای همین SP الزاما ثابت نمیمونه و دسترسی به آرگومان ها با SP ممکنه سخت بشه و قابل اتکا نیست.
برای همین موقتا BP که شروع پشته است روی اون SP تنظیم می کنند که در داخل روال برای دسترسی به آرگومان ها از رجیستر BP استفاده کنند (هنگام قرار گرفتن و برداشتن مقدار از پشته موقعیت BP تغییر نمی کنه)
 

جدیدترین ارسال ها

بالا