ترجمة الاكواد البرمجية من معمارية SIC/XE الى معمارية Intel x86 - مقال كلاود
 إدعم  المنصة   
makalcloud
تسجيل الدخول

ترجمة الاكواد البرمجية من معمارية SIC/XE الى معمارية Intel x86

محمد عبد الحفيظ شلودي - تخصص تكنولوجيا المعلومات جامعة بوليتكنك فلسطين

  نشر في 10 يونيو 2021  وآخر تعديل بتاريخ 10 يونيو 2021 .

محمد عبد الحفيظ شلودي - تخصص تكنولوجيا المعلومات

جامعة بوليتكنك فلسطين


المقدمة:

هذا التقرير يخلص العمل المنجز في الورقة العلمية بعنوان “A SIC/XE to Intel Pentium x86 assembly Code Translator”, حيث تتحدث الورقة عن معمارية (SIC/XE) ومعمارية (Intel x86), وتتحدث عن تصميم برنامج يقوم بترجمة البرامج المكتوبة بمعمارية (SIC/XE) الى برامج تعمل بمعمارية (Intel x86), وتتحدث ايضا عن المشاكل والتحديات التي واجهتهم بتصميم هذا المترجم وكيف تمكنوا من وضع الحلول لها, وبالخاتمة قاموا بتقييم المترجم من حيث السرعة والفعالية.

ترجمة الكود البرمجي من نظام الى اخر:

في محاولة مشابهة لترجمة الكود البرمجي من نظام لأخر, عندما صمموا برنامج لترجمة برنامج بلغة (SML) إلى برنامج بلغة (JAVA), حيث يتحدث المؤلف عن مدى صعوبة العملية بسبب اختلاف اللغتين حيث لغة (SML) هي لغة برمجة وظيفية (functional programming language) بينما لغة (JAVA) هي لغة كائنية التوجه (object oriented language), وهذا الاختلاف في التطلعات والتراكيب البرمجية وكيف لغة البرمجة تعبر عن الاشياء, جعلت من الصعب جدا عمل مترجم بين اللغتين, ومن المؤكد ان هذه المشكلة ايضا ستكون موجودة بتصميم المترجم بين المعماريتين (SIC/XE و X86).

برنامج الترجمة من كود الى كود يمكن ان يجعل الكود باللغة المستهدفة اطول واكثر تعقيدا.

اعتقد ان برنامج الترجمة من كود الى كود قد يكون مفيدا بحالة الترجمة من لغة تأخذ وقت أطول للتنفيذ في برامجها من اللغة المستهدفة, أعني مثل تحويل برنامج من لغة (JAVA) الى لغة (CPP), حيث سيتم إنتاج برنامج اكثر تعقيدا ولكن يعمل بشكل أسرع.

أكبر الصعوبات في الترجمة كانت في تحويل نظام يعمل بنظام 24bit-word في معمارية (SIC/XE) الى نظام يعمل بنظام 32bit-word في معمارية (Intel x86), حيث تمكنوا من حل هذه المشكلة, ويوجد ايضا مشكلة اختلاف ال(byte ordering) بين المعماريتين, حيث لم يتمكنوا من حل هذه المشكلة, لأنهم لم يقوموا بتطبيق التحليل السياقي (contextual analysis) في الكود البرمجي .

ترتيب البايت ذي النهاية الكبيرة والصغيرة (Big-endian and Little-endian):

لتعريف مفهوم ترتيب البايت, في معمارية (SIC/XE), حجم ال(word) يتكون من 3 بايتات, وموقع الذاكرة الواحد يمثل بايت واحد, تعريف ترتيب البايت هو كيفية عمل إسقاط للثلاثة بايتات في الذاكرة, حيث ترتيب ال(big-endian) يبدأ بالبايت الأكثر أهمية أي البايت الأيسر ويكمل الى البايت الأيمن, بينما ترتيب ال(little-endian) هو العكس تماما.

الترجمة (translation)

تتم عملية الترجمة عن طريق الأوامر (instructions) دون تضمين سياق الكود للحفاظ على البساطة. عملية الترجمة تعتمد على الأوامر المتوفرة في اللغة المترجم منها و الأوامر المتوفرة في اللغة المترجم إليها.

في كل من المعماريتين (SIC/XE و x86) حجم الByte ثابت و هو 8 bit, لكن هناك اختلاف في حجم الword حيث أن حجم الـ word في ال SIC/XE هو 3 bytes بينما حجمها في intel x86 هو 2 bytes, لذلك سنستخدم double word في معمارية intel x86 لتمثيل word واحدة في معمارية SIC/XE.

بسبب اختلاف ترتيب الـ byte في كل من المعماريتين, سيكون هناك اختلاف في الوصول إلى عناصر المصفوفات.

بينما تحويل عناوين ال registers من SIC/XE إلى intel x86 هي عملية مباشرة, لأن intel x86 يحتوى على عدد اكبر من ال registers.

بخصوص طرق العنونة, كلتا المعماريتين لديهم طرق عنونة متشابهة وبالتالي هم يقومون بنفس الوظيفة ما عدا العنونة الفورية (immediate addressing) والعنونة الغير مباشرة (indirect addressing), وبالتالي علينا تخزين قيمة المعامل في الذاكرة ومن ثم قرائتها, وهنا نلاحظ ان الكود المترجم يحتوي على عدد أسطر اكثر من الكود الأصلي.

التقييم (Evaluation)

المقارنة تمت بين برنامج SIC/XE يعمل على برنامج محاكاة (simulator) و نفس البرنامج مترجم الى x86 ويعمل على معالج حقيقي.

في التجربة الأولى كان لدينا برنامج ينسخ من ملف ادخال الى ملف اخراج, فكانت سرعة التنفيذ (execution speed) للبرنامج الذي يعمل على برنامج المحاكاة أسرع وذلك لأن برنامج المحاكاة يستخدم نوع من التخزين المؤقت, لذلك أظن أن التجربة لم تعكس التغيير في السرعة الناتجة عن الترجمة.

بينما في برنامج Hanoi tower, البرنامج المترجم كان أسرع من البرنامج الذي يعمل على برنامج المحاكاة بستة أضعاف ونصف.

طول الكود المترجم سيكون أطول من الكود الأصلي في أغلب الحالات وذلك لأن بعض الاوامر في الSIC/XE قد تتحول من أمر واحد الى ما بين اثنين وخمسة عشر أمر في معمارية intel x86, وخصوصا الأوامر المتعلقة في عمليات الإدخال والإخراج. في البرامج التي لا تركز على تنفيذ أوامر الإدخال والإخراج يصبح طول البرنامج 1.75 ضعف حجم البرنامج الأصلي, بينما البرنامج الذي كان ينسخ من ملف ادخال الى ملف اخراج قد تحول من سبع اوامر الى واحد واربعين أمر.

أغلب البرامج المكتوبة بلغة SIC/XE تتحول الى كود intel x86 صحيحة لكن بعض البرامج تتحول الى كود خاطئ بسبب الاختلاف في ترتيب الداخلي للbyte, حجم الذاكرة وكيف يتعامل كل من المعماريتين مع ادوات الادخال والاخراج.

في برنامج Hanoi كانت هناك مشكلة في ترجمة العناوين ABC, بسبب اختلاف ترتيب الـ byte, حيث كان برنامج الx86 يفهمها على أنها CBA, و لتصحيح ذلك يجب اللجوء إلى عمل بعض التحليل السياقي (contextual analysis).

ملاحظات:

اظن انهم قد ارتكبوا خطأ في ترجمة الأوامر. فقد كان هناك بعض اوامر SIC/XE التي لم تكن موثقة (documented) مثل HIO, و STI, و TIO. المطورين قد تجاهلوا تلك الأوامر ولم يضعوها في الحسبان. أظن أن ذلك خطأ لأنه يؤثر على صحة الترجمة. لكن الورقة العلمية كتبت لأهداف تعليمية لتكون مثالا للطلاب عن كيفية تطوير مترجم, وبتالي ربما لم يكن تجاهل بعض الأوامر خطأ كبيرا.

كما اعتقد ان الترجمة من لغة تجميع (assembly language) الى أخرى, يختلف كثيراً عن التحويل من لغة عالية المستوى (high-level) إلى لغة أخرى عالية المستوى.

اللغة المستخدمة في الورقة بسيطة وسهلة الفهم. يعجبني ترتيب المواضيع وكيفية شرح كل من المعماريتين في جمل قصيرة. كما قاموا بترتيب وتجميع المواضيع المختلفة مثل أنواع البيانات, و الregisters, طرق العنونة و غيرها و شرحها بشكل مفصل ومن ثم بعدها قاموا بتقييم المترجم وشرح كيف يمكن تطويره وتحسينه في المستقبل.



   نشر في 10 يونيو 2021  وآخر تعديل بتاريخ 10 يونيو 2021 .

التعليقات


لطرح إستفساراتكم و إقتراحاتكم و متابعة الجديد ... !

مقالات شيقة ننصح بقراءتها !



مقالات مرتبطة بنفس القسم

















عدم إظهارها مجدداً

منصة مقال كلاود هي المكان الأفضل لكتابة مقالات في مختلف المجالات بطريقة جديدة كليا و بالمجان.

 الإحصائيات

تخول منصة مقال كلاود للكاتب الحصول على جميع الإحصائيات المتعلقة بمقاله بالإضافة إلى مصادر الزيارات .

 الكتاب

تخول لك المنصة تنقيح أفكارك و تطويرأسلوبك من خلال مناقشة كتاباتك مع أفضل الكُتاب و تقييم مقالك.

 بيئة العمل

يمكنك كتابة مقالك من مختلف الأجهزة سواء المحمولة أو المكتبية من خلال محرر المنصة

   

مسجل

إذا كنت مسجل يمكنك الدخول من هنا

غير مسجل

يمكنك البدء بكتابة مقالك الأول

لتبق مطلعا على الجديد تابعنا