اصطلاح الاستدعاءاصطلاح الاستدعاء (بالإنجليزية: Calling convention) في علوم الكمبيوتر، هو مخطط مستوى التنفيذ (منخفض المستوى) لكيفية تلقي الوظائف الفرعية للمعلمات من المستدعي وكيفية إرجاع النتائج.[1] الاختلافات في التطبيقات المختلفة تتضمن معلمات (حيث) وقيم الإرجاع وعناوين الإرجاع وارتباطات المكونات. كما تتضمن الكيفية التي يتم بها تقسيم مهام تحضير الاستدعاء لدالة ما واستعادة البيئة بعد ذلك بين المستدعي والوجهة. قد يكون اصطلاح الاستدعاء مرتبطا باستراتيجية تقييم لغة برمجة معينة، ولكن وفي معظم الأحيان لا يعتبر جزءا منه (و العكس بالعكس)، كما يتم تعريف إستراتيجية التقييم عادة على مستوى تجريدي أعلى وينظر إليها على أنه جزء من اللغة وليست مجرد تفصيل تنفيذ منخفض المستوى للمحول البرمجي للغة معينة. الاختلافاتقد تختلف اصطلاحات الاستدعاء في:
تباين المحول البرمجيغالبا ما يتم تحديد المحول البرمجي للغة البرمجة في مواصفات هذه اللفة بشكل جزئي (أو في بعض محاور التنفيذ)، لا تزال أنواع اصطلاحات استدعاءات متنوعة مستخدمة في تطبيقات مختلفة من هذه اللغات والتي من الممكن اختيارها في كثير من الأحيان. وتعود أسباب ذلك إلى الأداء، والتكيف المتكرر مع الاستدعاءات بين لغات البرمجة الأخرى، والقيود أو الاستدعاءات التي تفرضها مختلف المنصات (مجموعات من بنيات وحدة المعالجة المركزية وأنظمة التشغيل). تباين اسلوب البناءتحتوي بنيات وحدة المعالجة المركزية دائمًا على أكثر من اصطلاح استدعاء واحد محتمل. بوجود العديد من سجلات الأغراض العامة وغيرها من الميزات، فإن العدد المحتمل لاصطلاحات الاستدعاء كبير. بعض البنيات محددة لاستخدام اصطلاح استدعاء واحد فقط، تحدده البنية. بنية إكس 86 (32 بت)يتم استخدام بنية x86 مع العديد من اصطلاحات الاستدعاء المختلفة. ونظرًا لقلة عدد السجلات البنوية، فإن اصطلاحات استدعاء بنية x86 تمرر معظم الوسائط على المكدس، بينما يتم تمرير قيمة الإرجاع (أو المؤشر إليها) إلى السجل. تستخدم بعض الاصطلاحات سجلات للمعلمات القليلة الأولى، مما قد يحسن من أداء العمليات القصيرة والبسيطة التي يتم استدعاؤها بشكل متكرر (أي الروتينات التي لا تستدعي إجراءات روتينية). مثال عن الاستدعاء: push EAX ; pass some register result
push byte[EBP+20] ; pass some memory variable (FASM/TASM syntax)
push 3 ; pass some constant
call calc ; the returned result is now in EAX
هيكل نموذجي للمستدعى: (من الممكن تحسين بعض أو كل التعليمات أدناه في إجراءات بسيطة) calc:
push EBP ; save old frame pointer
mov EBP,ESP ; get new frame pointer
sub ESP,localsize ; reserve stack space for locals
.
. ; perform calculations, leave result in EAX
.
mov ESP,EBP ; free space for locals
pop EBP ; restore old frame pointer
ret paramsize ; free parameter space and return
بنية إيه آر إم (32 بت)اصطلاحات استدعاء بنية إيه آر إم (32 بت) القياسية تخصص 15 سجلا للأغراض العامة مثل:
إذا كان نوع القيمة التي يتم إرجاعها كبيرا جدًا بحيث لا يمكن احتواؤها في r0 إلى r3، أو من النوع الذي لا يمكن تحديد حجمه بشكل ثابت وقت التحويل البرمجي، فيجب على المتصل تخصيص مساحة لتلك القيمة في وقت التشغيل، وتمرير مؤشر إلى تلك المساحة في السجل r0. يجب أن تحافظ الروتينات الفرعية على محتويات r4 إلى r11 ومؤشر المكدس.على وجه الخصوص، يجب أن تقوم الروتينات الفرعية التي تستدعي روتينات فرعية أخرى بحفظ عنوان الإرجاع في سجل الارتباط r14 إلى المكدس قبل استدعاء تلك الروتينات الفرعية الأخرى. ومع ذلك، لا تحتاج هذه الروتينات الفرعية إلى إرجاع هذه القيمة إلى r14 - فهي تحتاج فقط إلى تحميل تلك القيمة إلى سجل r15 (عداد البرنامج) للعودة. يلزم اصطلاح استدعاء بنية إيه آر إم باستخدام مكدس تنازلي كامل. , وكما يؤدي اصطلاح الاستدعاء للروتين الفرعي في بنية إيه آر إم القياسية إلى:
بنية إيه آر إم (64 بت)اصطلاح استدعاء بنية إيه آر إم (64 بت) يخصص 31 سجلا للأغراض العامة مثل:
يتم الرجوع إلى السجل الثاني والثلاثين، الذي يعمل كمؤشر مكدس أو كسجل صفر يُحسب السياق، إما كـ sp أو xzr. جميع السجلات التي تبدأ بـ x لها سجل 32 بت مطابق ومثبت مسبقا بـ w. وبهذا يسمى x32 بت ب w0. بنية باور بي سيتحتوي بنية باور بي سي (PowerPC) على عدد كبير من السجلات بحيث يمكن لمعظم الوظائف تمرير كافة الوسائط في السجلات لطلبات المستوى الواحد. يتم تمرير الوسائط الإضافية على المكدس، كما يتم تخصيص مساحة للوسيطات المستندة إلى السجل دائماً على المكدس كراحة للدالة المسماة في حالة استخدام استدعاءات متعددة المستويات (متكررة أو غير ذلك) كما يجب حفظ السجلات. يتم استخدام اصطلاح استدعاء واحد لجميع اللغات الإجرائية. مجموعة تعليمات ميبساصطلاح الاستدعاء الأكثر استخداماً لـ ب نية ميبس 32 بت هو واجهة التطبيق الثنائية O32 التي تمرر الوسائط الأربعة الأولى إلى دالة في السجلات $a0-$a3; وكما يتم تمرير الوسيطات اللاحقة على المكدس. بنية سباركتم بناء بنية سبارك بالاعتماد على نوافذ التسجيل على عكس معظم بنيات RISC. بنية نظام آي بي إم 360بنية نظام آي بي إم 360 هي بنية أخرى بدون مكدس أجهزة. بنية سوبر إتش
بنية 68 كياصطلاحات الاستدعاء الأكثر شيوعا لسلسلة موتورولا 68000 هي:
بنية آي بي إم 1130آي بي إم 1130عبارة عن جهاز 16 بت صغير يحوي ستة سجلات فقط بالإضافة إلى مؤشرات الشروط، ولا يحتوي على مكدس. اعتبارات التنفيذيجب مراعاة هذه التباينات السابقة عند الجمع بين الوحدات المكتوبة بلغات متعددة، أو عند استدعاء واجهات برمجة التعليمات لنظام التشغيل أو مكتبة من لغة أخرى غير تلك التي تمت كتابة الاصطلاح بها؛ وفي هذه الحالات، يجب توخي الحذر بشكل خاص لتنسيق اصطلاحات الاستدعاء المستخدمة من قبل المصدر والوجهة. وقد يستخدم البرنامج المتكوب بلغة واحدة اصطلاحات استدعاء متعددة، إما أن يتم اختيارها من قبل المحول البرمجي، لتحسين التعليمات البرمجية، أو أن تكون محددة قبل المبرمج. التعليمات البرمجية المترابطةتقع على عاتق التعليمات البرمجية المترابطة كافة المسؤولية المتعلقة بالإعداد والتنظيف بعد استدعاء دالة ما إلى تعليمة برمجية. لا يقوم رمز الاستدعاء بأي شيء سوى سرد الروتينات الفرعية التي سيتم استدعاؤها. ما يضع وظيفة الإعداد وتنظيف التعليمات البرمجية في وظيفة واحدة بدلاً من وضعها في عدة وظائف في أماكن متفرقة. الأمر الذي جعل التعليمات البرمجية المترابطة عبارة عن اصطلاحات استدعاء مُحكمة. تمرر التعليمات البرمجية المترابطة كافة الوسائط على المكدس. ويتم إرجاع كافة قيم الإرجاع إلى المكدس. تقوم تطبيقات التعليمات البرمجية المترابطة بتخزين العديد من قيم المكدس العليا في السجلات، والتي عادةً ما تكون أسرع من اصطلاحات الاستدعاء الفرعية. لغة البرمجة 1يقوم اصطلاح الاستدعاء الافتراضي للبرامج المكتوبة بلغة PL/I بتمرير كافة الوسائط حسب المرجع، على الرغم من أنه قد يتم تحديد اصطلاحات أخرى اختياريًا. يتم معالجة الوسيطات بشكل مختلف للمحولات البرمجية والأنظمة الأساسية المختلفة، ولكن عادةً ما يتم تمرير عناوين الوسيطة عبر قائمة وسيطة في الذاكرة. قد يتم تمرير عنوان نهائي مخفي يشير إلى منطقة لاحتواء قيمة الإرجاع. انظر أيضامراجع
روابط خارجية |