اصطلاح استدعاء إكس 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

عدل

المراجع

عدل
  1. ^ "معلومات عن اصطلاح استدعاء إكس 86 على موقع semanticscholar.org". semanticscholar.org. مؤرشف من الأصل في 2022-03-17.