اصطلاح استدعاء إكس 86
هذه المقالة بها مشكلات متعدِّدة. فضلًا ساعد في تحسينها أو ناقش هذه المشكلات في صفحة النقاش.
|
اصطلاح استدعاء إكس 86 (بالإنجليزية: x86 calling conventions) تصف هذه المقالة بنية اصطلاح الاستدعاء المستخدم عند البرمجة في بنية المعالجات الدقيقة إكس 86، تصف اصطلاحات الاستدعاء واجهة التعليمات البرمجية المستدعاة:
- الترتيب الذي يتم به تخصيص المعلمات الذرية (العددية) أو الأجزاء الفردية من معلمة معقدة.[1]
- كيفية تمرير المعلمات.
- تسجيل الوظيفة المستدعاة والحفاظ عليها لأجل المستدعي.
- كيفية تقسيم مهمة الإعداد والتنظيف بعد استدعاء دالة ما بين المستدعي والوجهة.
ويرتبط ذلك ارتباطا وثيقا بتعيين الأحجام والأشكال لأنواع لغة البرمجة. موضوع آخر وثيق الصلة هو تغييرات الاسم (بالإنجليزية: Name mangling)، الذي يحدد كيفية وضع أسماء الرموز في خريطة التعليمات البرمجية لأسماء الرموز المستخدمة من قبل الرابط. اسطلاح الاستدعاء وتمثيلات النوع و تغييرات الاسم كلها أجزاء مما يعرف باسم واجهة التطبيق الثنائية (بالإنجليزية: Application binary interface)، وغالباً ما تكون هناك اختلافات طفيفة في كيفية تنفيذ محولات البرمجة لاصطلاحات الاستدعاء هذه.
خلفية تاريخية
عدلقبل الحواسيب الصغيرة، كانت الشركات المصنعة توفر عموما ً نظام تشغيل ومحولا برمجيا لعدة لغات برمجة.وكذلك اصطلاح (اصطلاحات) الاستدعاء لكل منصة والتي تم تعريفها بواسطة أدوات البرمجة الخاصة بالشركة المصنعة.
تنظيف الوسائط من قبل المستدعي
عدلفي هذه الاصطلاحات، يقوم المتصل بتنظيف الوسيطات من المكدس.
تصريح سي
عدلتصريح سي (بالإنجليزية: C declaration) هو اصطلاح استدعاء نشأ من لغة البرمجة سي وهو مستخدم من قبل العديد من المحولات البرمجية للغة سي لبنية إكس 86.
مقتطف من الشفرة المصدرية من لغة البرمجة سي:
int callee(int, int, int);
int caller(void)
{
return callee(1, 2, 3) + 5;
}
نداء سيس
عدلنداء سيس (بالإنجليزية: syscall) وهو مشابه لتصريح سي ويتم فيه دقع اصطلاحات الاستدعاءات من اليمين إلى اليسار.
أوبت لينك
عدلأوبت لينك (بالإنجليزية: optlink)
تنظيف الوسائط من قبل الوجهة
عدلفي هذه الاصطلاحات، تنظف الوجهة الوسائط من المكدس. كما أنه من السهل التعرف على الوظائف التي تستخدم هذه الاصطلاحات في كود لغة التجميع (بالإنجليزية: Assembly language)
باسكال
عدلاستناداً إلى اصطلاح استدعاء لغة البرمجة باسكال، يتم دفع المعلمات على المكدس بترتيب من اليسار إلى اليمين (على العكس من تصريح سي)، وفيه ويكون المستدعي مسؤولاً عن إزالتها من المكدس.
نداء إس تي دي
عدلنداء إس تي دي (بالإنجليزية: stdcall) اصطلاح استدعاء إس تي دي هو شكل آخر من اصطلاح استدعاء باسكال حيث يكون المستدعي مسؤولاً عن تنظيف المكدس، ويتم فيه دفع المعلمات إلى المكدس بترتيب من اليمين إلى اليسار، كما هو الحال في اصطلاح استدعاء تصريح سي. يتم تعيين سجلات EAX و ECX و EDX للاستخدام داخل الدالة. يتم تخزين قيم الإرجاع في سجل EAX.
نداء مايكروسوف السريع
عدلنداء مايكروسوف السريع (بالإنجليزية: Microsoft fastcall) يمرر أول وسيطتين (تقييم من اليسار إلى اليمين) والتي تناسب ECX و EDX. يتم دفع الوسائط المتبقية إلى المكدس من اليمين إلى اليسار. عندما يقوم محول مايكروسوف البرمجي بالتحويل البرمجي لـ IA64 أو AMD64، فإنه يتجاهل الكلمة الأساسية __fastcall ويستخدم اصطلاح استدعاء 64 بت بدلاً من ذلك.
نداء فيكتور مايكروسوف
عدلنداء فيكتور مايكروسوف (بالإنجليزية: Microsoft vectorcall) قدمت مايكروسوف اتفاقية النداء فيكتور في برنامجها مايكروسوف فيجوال استوديو استجابة لمخاوف مطوري الألعاب والرسومات والفيديو المتعلقة بالكفاءة. يسمح هذا النداء بتمرير أنواع متجهات أكبر إلى السجل بدلاً من المكدس.
سجل بورلاند
عدلسجل بورلاند (بالإنجليزية: Borland register)
سجل واتكوم
عدلسجل واتكوم (بالإنجليزية: Watcom register) يتم تعيين ما يصل إلى 4 سجلات إلى الوسيطات على الترتيب التالي EAX، EDX، EBX، ECX. يتم تعيين الوسيطات للسجلات من اليسار إلى اليمين. إذا تعذر تعيين أي وسيطة إلى سجل (لنقل أنها كبيرة جداً) يتم تعيينها ويتم تعيين كافة الوسائط اللاحقة إلى المكدس.
توب سبيد كلاريون جي بي آي
عدلتوب سبيد كلاريون جي بي آي (بالإنجليزية: TopSpeed / Clarion / JPI) يتم تمرير المعلمات الصحيحة الأربعة الأولى في سجلات eax و ebx و ecx و edx. يتم تمرير معلمات النقطة العائمة على كومة النقاط العائمة - تسجل st0 و st1 و st2 و st3 و st4 و st5 و st6. يتم تمرير معلمات البنية دائمًا على المكدس. يتم تمرير معلمات إضافية على المكدس بعد استنفاد السجلات. يتم إرجاع قيم الأعداد الصحيحة في eax والمؤشرات في أنواع edx والنقاط العائمة في st0.
النداء الآمن
عدلالنداء الآمن (بالإنجليزية: safecall)
التنظيف من قبل المستدعي أو الوجهة
عدلهذا النداء (بالإنجليزية: thiscall)
حفظ السجل
عدلجزء آخر من اصطلاح استدعاء حيث يتم ضمان السجلات للاحتفاظ بقيمها بعد استدعاء الروتين.
سجلات (متقلبة) محفوظة للمستدعي
عدلوفقا لـ واجلهة التطبيق الثنائية من إنتل والتي تتوافق مع الغالبية العظمى من المحولات البرمجية، فإن EAX و EDX و ECX يجب أن تكون متاحة للاستخدام داخل أي إجرائية أو وظيفة.
السجلات المحفوظة (غير المتقلبة) التي تم حفظها من قبل الوجهة
عدليتم استخدام السجلات الأخرى للاحتفاظ بالقيم غير المتقلبة، التي يجب الحفاظ عليها عبر الاستدعاءات. بمعنى آخر، عندما يقوم المصدر بطلب استدعاء إجراء، فمن الممكن أن نتوقع أن هذه السجلات سوف تحمل نفس القيمة الراجعة من الوجهة.
اصطلاحات استدعائات بنية إكس 86 وإكس 64
عدلاصطلاح استدعاء مايكروسوفت بنية إكس 64
عدلنظام يونكس الخامس إيه إم دي بنية 64 واجهة التطبيق الثنائية
عدلقائمة اصطلاحات الاستدعاءات لبنية إكس 86
عدلالمراجع
عدل- ^ "معلومات عن اصطلاح استدعاء إكس 86 على موقع semanticscholar.org". semanticscholar.org. مؤرشف من الأصل في 2022-03-17.