اطلاعیه

Collapse
No announcement yet.

کمک در مورد far function

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک در مورد far function

    سلام دوستان تابع زیر یه تابع تو هدر گرافیکه لطفا قالب نوشتن تابه رو واسم تفسیر کنید و چرا وقتی از تابع تو برنامه استفاده میشه فقطarcنوشته میشه؟؟؟
    ar
    کد:
    void    far _BGIENTRY arc(int __x, int __y, int __stangle, int __endangle,
                   int __radius);

    #2
    پاسخ : کمک در مورد far function

    بترتیب:

    void یعنی مقدار برگشتی تابع مهم نیست یا قابل اعتماد نیست. عوام میگن اصلا مقداری بر نمیگردونه.

    far یعنی این تابع far هست! در ساختاری مثل 8086 دو جور عمل صدا کردن تابع داریم. یکی بصورت داخل سگمنت یا near و دیگری بصورت بین دو سگمنت احتمالا متفاوت یا far. در حالت far علاوه بر آدرس برگشت offset؛ شماره سگمنت cs هم در پشته ذخیره میشه و در هنگام برگشت از پشته بازیابی میشه. معمولا از این مورد مواقعی استفاده میشه که میخوان کد تابع رو در سگمنتی مجزا از بقیه کد ها قرار بدن. در صورتی که بخواییم یک تابع far رو از همون سگمنت که حاوی تابع هست صدا کنیم میتونیم ابتدا سگمنت cs رو push کنیم و بعد به عنوان فراخوانی near صدا کنیم. اما برگشت همواره far باقی میمونه. این نوع فراخوانی باعث کندی اجرای برنامه مخصوصا در حالت حفاظت شده میشه چون مکانیسم های حفاظتی بیشتری رو در CPU فعال میکنه.

    _BGIENTRY نحوه پاس کردن آرگومانها به این تابع رو مشخص میکنه و جسارتا به من و شما ربطی نداره که چیه. ولی ممکنه هر چیزی مثل CDECL یا PASCAL یا FASTCALL یا مشابه باشه.

    بقیه اش هم مسلما خودتون میدونین ولی در هنگام صدا زدن این مشکل کامپایلره که از روی heading و اسم تابع تشخیص بده آیا باید صدا زدن far باشه یا near؛ آرگومانها در رجیستر پاس بشن یا پشته؛ از راست به چپ باشه یا بالعکس؛ پشته رو صدا زننده خالی کنه یا خود تابع. به مجموعه اینا هم میگن:
    calling conventions

    دیدگاه

    لطفا صبر کنید...
    X