قم بتسجيل قواعد التخصيص في التعليمات البرمجية التي تم إنشاؤها بواسطة برامج التحويل البرمجي الرئيسية لـ C/C++

StackOverflow https://stackoverflow.com/questions/256220

سؤال

أتذكر بعض القواعد منذ وقت مضى (معالجات Intel ما قبل 32 بت)، عندما كان الاضطرار إلى تحليل مخرجات التجميع الناتجة عن مترجمات C/C++ (في حالتي، Borland/Turbo في ذلك الوقت) متكررًا جدًا (على الأقل بالنسبة لي) للعثور على اختناقات الأداء، ولخلط إجراءات التجميع بأمان مع كود C/C++.أشياء مثل استخدام سجل SI لـ هذا المؤشر، يتم استخدام AX لقيم الإرجاع، والتي يجب الاحتفاظ بالسجلات عند إرجاع روتين التجميع، وما إلى ذلك.

الآن كنت أتساءل عما إذا كان هناك بعض المراجع لمترجمات C/C++ الأكثر شيوعًا (Visual C++، وGC، وIntel...) والمعالجات (Intel، وARM، ...)، وإذا لم يكن الأمر كذلك، فأين يمكن العثور على القطع المراد إنشاؤها واحد.أفكار؟

هل كانت مفيدة؟

المحلول

أنت تسأل عن "واجهة التطبيق الثنائية" (ABI) والاتفاقيات الدعوة. وعادة ما تحدد من قبل أنظمة التشغيل والمكتبات، وتنفذ من قبل المجمعين وlinkers. جوجل عن "ABI" أو "اصطلاح استدعاء". بعض نقاط الانطلاق من ويكيبيديا و <لأ href = "http://wiki.debian.org/ ArmEabiPort "يختلط =" noreferrer "> ديبيان لARM .

نصائح أخرى

ويلخص "دعوة اتفاقيات" وثيقة Agner الضباب، وبين أمور أخرى، فإن ويندوز ولينكس 64 و 32 بت أبيس: <لأ href = "http://www.agner.org/optimize/calling_conventions.pdf" يختلط = "نوفولو"> http://www.agner.org/optimize/calling_conventions.pdf . انظر الجدول 4 على p.10 للحصول على ملخص استخدام السجل.

وتحذير واحد من تجربة شخصية: لا تضمين افتراضات حول ABI في التجميع مضمنة. إذا كنت أكتب وظيفة في التجميع مضمنة التي تفترض عودة و / أو نقل المعلمة في سجلات معينة (مثل EAX، RDI، مؤشر القوة النسبية)، وسوف كسر إذا / عندما يتم inlined وظيفة من قبل المجمع.

يدعم برنامج التحويل البرمجي Open Watcom C/C++ اثنتين من اتفاقيات الاتصال، القائمة على التسجيل (الافتراضي) والمبنية على المكدس (قريبة جدًا مما يستخدمه المترجمون الآخرون).يصف دليل المستخدم لهذا المترجم كلاهما وهو متاح مجانًا متصل, ، جنبا إلى جنب مع المترجم بحد ذاتها.قد تجد هذه المواضيع في دليل المستخدم مفيدة بشكل خاص:

  • 10.4.1 تمرير الوسيطات باستخدام اصطلاحات الاتصال المستندة إلى السجل
  • 10.4.6 استخدام اصطلاحات الاتصال القائمة على المكدس
  • 10.5 اصطلاحات الاستدعاء للتطبيقات المستندة إلى 80x87

حسنا، اليوم إذا تم تشغيل التحسين على، هناك arn't أي. لكن دول مجلس التعاون الخليجي يسمح لك أن تعلن تعليمات التجميع الخاص بك يجب أن تستخدم متغير معين بغض النظر عما إذا كان ذلك في السجل أم لا، أو حتى لفرض وضع تو دول مجلس التعاون الخليجي هذا المتغير إلى تسجيل صالحة للاستعمال مع التعليمات الخاصة بك. يمكنك أيضا بإعلان الذي يسجل مضمنة احتياطيات كتلة التجمع الخاص لنفسها (حتى المترجم أن يولد apropriate حفظ / استعادة كود حول مضمنة قطعة الخاص بك، إذا لزم الأمر)

ولكن أعتقد أنا بأي حال من الأحوال على يقين من أن يستخدم مجلس التعاون الخليجي إلى Itanium ABI للحصول على أكثر من وظيفتها. وincompatibilites بينه وبين ABI أنه يستخدم و<لأ href = "http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/C_002b_002b-Dialect-Options.html#C_002b_002b-Dialect-Options" يختلط = "نوفولو noreferrer"> موثقة .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top