تجميع عالي المستوى

لغة التجميع عالية المستوى ( HLA ) هي لغة طوّرها راندال هايد ، تُمكّن من استخدام بنيات لغات البرمجة عالية المستوى، مما يُساعد مطوري لغة التجميع، سواءً كانوا مبتدئين أو ذوي خبرة. تدعم هذه اللغة أنواع البيانات المتقدمة والبرمجة كائنية التوجه . يعتمد تركيبها النحوي بشكلٍ عام على العديد من لغات البرمجة عالية المستوى (HLLs)، مثل باسكال ، وآدا ، وموديولا-2 ، وسي++ ، لتسهيل إنشاء برامج لغة التجميع سهلة القراءة ، وتمكين مبرمجي لغات البرمجة عالية المستوى من تعلّم لغة التجميع عالية المستوى بسرعة.

الأصول والأهداف

صُممت لغة HLA في البداية كأداة لتدريس برمجة لغة التجميع في الكليات والجامعات. وكان الهدف منها هو الاستفادة من معرفة الطلاب البرمجية الحالية لتسريع تعلمهم للغة التجميع. فمعظم طلاب دورات برمجة لغة التجميع على دراية مسبقة بهياكل التحكم عالية المستوى مثل IF وWHILE و FOR . وتتيح HLA للطلاب تطبيق هذه المعرفة مباشرةً على برمجة لغة التجميع في وقت مبكر من الدورة. وهذا يمكّنهم من إتقان المواد التمهيدية الأخرى في لغة التجميع قبل تعلم كيفية برمجة الأشكال منخفضة المستوى لهذه الهياكل. ويستخدم كتاب " فن برمجة لغة التجميع" لراندال هايد لغة HLA لهذا الغرض. [ 1 ]

مُجمِّع عالي المستوى مقابل مُجمِّع منخفض المستوى

يدعم HLA v2.x نفس تعليمات الآلة منخفضة المستوى التي يدعمها مُجمِّع عادي منخفض المستوى. كما تدعم المُجمِّعات عالية المستوى عبارات شبيهة بلغات البرمجة عالية المستوى (مثل IF و WHILE) وتوجيهات أكثر تقدماً لتعريف البيانات، بما في ذلك الهياكل - السجلات والاتحادات وحتى الفئات .

تشمل أمثلة المجمعات المتطورة HLA و Microsoft Macro Assembler (MASM) و Turbo Assembler (TASM) على عائلة معالجات Intel x86 .

على عكس معظم أدوات التجميع الأخرى، يتضمن مُجمِّع HLA مكتبة قياسية تضم آلاف الدوال والإجراءات ووحدات الماكرو التي يمكن استخدامها لإنشاء تطبيقات كاملة بسهولة لغة برمجة عالية المستوى. ورغم أن مكتبات لغة التجميع ليست جديدة، إلا أن اللغة التي تتضمن مكتبة قياسية كبيرة تشجع المبرمجين على استخدام أكواد المكتبة بدلاً من كتابة دوالهم الخاصة.

يدعم HLA جميع تعليمات الآلة منخفضة المستوى نفسها التي تدعمها مُجمِّعات x86 الأخرى. علاوة على ذلك، تستند هياكل التحكم عالية المستوى في HLA إلى تلك الموجودة في MASM وTASM، والتي سبقت ميزاتها الشبيهة بلغات البرمجة عالية المستوى (HLL) ظهور HLA بعدة سنوات. في HLA، يمكن كتابة كود التجميع منخفض المستوى بسهولة تامة كما هو الحال مع أي مُجمِّع آخر، وذلك بتجاهل هياكل التحكم الخاصة بلغات البرمجة عالية المستوى. على عكس لغات البرمجة عالية المستوى مثل باسكال وC++، لا يتطلب HLA استخدام عبارات asm المضمنة. تُسهِّل ميزات HLA الشبيهة بلغات البرمجة عالية المستوى عملية التعلم لمبرمجي التجميع المبتدئين، على أمل أن يتوقفوا عن استخدام تلك العبارات بمجرد إتقانهم لمجموعة التعليمات منخفضة المستوى. عمليًا، يستمر العديد من المبرمجين ذوي الخبرة في استخدام عبارات شبيهة بلغات البرمجة عالية المستوى في HLA وMASM وTASM لفترة طويلة بعد إتقانهم لمجموعة التعليمات منخفضة المستوى، وذلك عادةً لتحسين قابلية قراءة الكود.

من الممكن أيضًا كتابة برامج عالية المستوى باستخدام HLA، مما يقلل من رتابة برمجة لغة التجميع منخفضة المستوى. يرفض بعض مبرمجي لغة التجميع HLA رفضًا قاطعًا لأنها تتيح لهم القيام بذلك. مع ذلك، فإن دعم كلٍ من البرمجة عالية المستوى ومنخفضة المستوى يمنح أي لغة نطاقًا أوسع من التطبيقات.

السمات المميزة

هناك ميزتان تميزان HLA عن برامج التجميع الأخرى x86: نظام الماكرو القوي (لغة وقت الترجمة) ومكتبة HLA القياسية.

نظام الماكرو

تتيح لغة HLA، التي تُترجم في وقت الترجمة، توسيع اللغة بسهولة، بل وتُمكّن من إنشاء لغات صغيرة خاصة بمجالات محددة لتبسيط مشاكل البرمجة الشائعة. يُعدّ الماكرو stdout.putمثالًا جيدًا على ماكرو متطور يُمكنه تبسيط البرمجة. انظر إلى استدعاء هذا الماكرو التالي:

stdout.put( "I=", i, " s=", s, " u=", u, " r=", r:10:2, nl );

يقوم الماكرو stdout.put بمعالجة كل وسيط لتحديد نوعه ثم يستدعي إجراءً مناسبًا في مكتبة HLA القياسية للتعامل مع مخرجات كل معامل.

تُوفر معظم مُجمّعات البرامج بعض إمكانيات الماكرو. وتكمن ميزة مُجمّع HLA على غيره في قدرته على معالجة وسائط الماكرو، مثل r:10:2استخدام دوال السلاسل النصية المُوسّعة في وقت الترجمة . كما يُمكن لمُلحقات الماكرو في HLA استنتاج أنواع المُتغيرات واستخدام هذه المعلومات لتوجيه توسيع الماكرو.

توفر لغة الماكرو في HLA ميزة خاصة للماكرو غير السياقي . تتيح هذه الميزة كتابة وحدات ماكرو بسهولة تمتد عبر أقسام أخرى من التعليمات البرمجية من خلال زوج من وحدات الماكرو البادئة والنهائية (إلى جانب استدعاءات الماكرو الوسيطة الاختيارية المتاحة فقط بين وحدتي الماكرو البادئة والنهائية). على سبيل المثال، يمكن كتابة عبارة SWITCH–CASE–DEFAULT–ENDSWITCH قابلة للتداخل بشكل كامل باستخدام هذه الميزة.

بسبب تصميم مرافق الماكرو HLA الخالي من السياق، يمكن تداخل عبارات switch..case..default..endswitch هذه دون حدوث تعارض في إصدار التعليمات البرمجية.

لغة وقت الترجمة

يُعد نظام الماكرو HLA جزءًا من لغة وقت الترجمة HLA (CTL) الأوسع نطاقًا. لغة وقت الترجمة HLA هي لغة مُفسَّرة متوفرة ضمن ملف مصدر برنامج HLA؛ ومن هنا جاء اسم لغة وقت الترجمة .

تتضمن لغة التحكم HLA CTL عبارات تحكم مثل #IF و#WHILE و#FOR و#PRINT، بالإضافة إلى عبارة إسناد . كما يمكن إنشاء متغيرات وثوابت وقت الترجمة، بما في ذلك أنواع البيانات المهيكلة مثل السجلات والاتحادات. توفر HLA CTL أيضًا مئات الدوال المدمجة، بما في ذلك مجموعة غنية من دوال مطابقة السلاسل والأنماط. تُمكّن HLA CTL المبرمجين من إنشاء برامج CTL تقوم بمسح وتحليل السلاسل، مما يتيح إنشاء لغات برمجة خاصة بالمجال مضمنة (EDSLs، وتُسمى أيضًا لغات مصغرة ). stdout.putيُعد الماكرو المذكور سابقًا مثالًا على هذه اللغات. يقوم ماكرو put (في مساحة اسم stdout، ومن هنا جاء stdout.put ) بتحليل قائمة معلمات الماكرو الخاصة به، ثم يُصدر الكود الذي سيطبع معاملاته.

المكتبة القياسية

مكتبة HLA القياسية عبارة عن مجموعة واسعة من الإجراءات والوحدات البرمجية الجاهزة (مثل وحدة stdout.put المذكورة أعلاه) التي تُبسط عملية البرمجة من خلال تجنيب المبرمجين عناء البدء من الصفر لكل تطبيق جديد. ولعل الأهم من ذلك، أن مكتبة HLA القياسية تُمكّن المبرمجين من كتابة تطبيقات قابلة للنقل تعمل على أنظمة تشغيل Windows أو Linux بمجرد إعادة تجميع الشفرة المصدرية . وعلى غرار مكتبة C القياسية للغة البرمجة C ، تُتيح مكتبة HLA القياسية للمستخدمين تجريد استدعاءات نظام التشغيل منخفضة المستوى ، بحيث يمكن استخدام نفس مجموعة واجهات برمجة تطبيقات نظام التشغيل (APIs) لجميع أنظمة التشغيل التي تدعمها HLA. في حين أن لغة التجميع تُتيح إجراء أي استدعاءات مطلوبة لنظام التشغيل، فإن استخدام مجموعة واجهات برمجة تطبيقات مكتبة HLA القياسية يُبسط كتابة برامج قابلة للنقل بين أنظمة التشغيل.

توفر مكتبة HLA القياسية آلاف الدوال والإجراءات ووحدات الماكرو. اعتبارًا من منتصف عام 2010، بالنسبة لإصدار HLA 2.12، تضمنت المكتبة دوالًا في هذه الفئات (مع العلم أن القائمة تتغير بمرور الوقت):

تصميم

نظام لغة HLA v2.x هو أداة تعمل عبر سطر الأوامر، وتتألف من عدة مكونات، منها برنامج shell (مثل hla.exe في نظام Windows)، ومترجم لغة HLA (مثل hlaparse.exe)، ومترجم منخفض المستوى (مثل HLABE أو محرك HLA الخلفي)، ورابط ( link.exe في نظام Windows، وld في نظام Linux)، وأدوات أخرى مثل مترجم الموارد لنظام Windows. اعتمدت الإصدارات السابقة للإصدار 2.0 على مُجمِّع خارجي ؛ بينما تستخدم الإصدارات 2.x وما بعدها من HLA مُجمِّع HLABE المُدمج كمنسق لرمز الكائن في الواجهة الخلفية.

يقوم تطبيق HLA shell بمعالجة معلمات سطر الأوامر وتوجيه الملفات المناسبة إلى كل برنامج في نظام HLA. وهو يقبل .hlaملفات (ملفات مصدر HLA)، .asmوملفات (ملفات مصدر لمجمعات MASM أو TASM أو FASM أو NASM أو Gas)، .objوملفات لإدخالها إلى الرابط، وملفات .rc(للاستخدام بواسطة مُجمِّع الموارد).

ترجمة الشفرة المصدرية

في الأصل، كانت أداة HLA v1.x تُجمّع شفرتها المصدرية في ملف مصدر وسيط، يقوم مُجمّع خلفي مثل MASM أو TASM أو FASM أو NASM أو GNU Assembler (Gas) بترجمته إلى ملف الشفرة التنفيذية منخفضة المستوى. ابتداءً من HLA v2.0، أُضيفت إليها وحدة HLA Back Engine (HLABE) الخاصة بها، والتي تُوفّر ترجمة الشفرة التنفيذية منخفضة المستوى. مع ذلك، لا يزال بإمكان HLA v2.x، عبر مُعاملات سطر الأوامر المُختلفة، ترجمة ملف مصدر HLA إلى ملف مصدر مُتوافق مع أحد هذه المُجمّعات الأخرى.

محرك خلفي HLA

محرك HLA الخلفي (HLABE) هو واجهة خلفية للمترجم تقوم بترجمة لغة وسيطة داخلية إلى كود تنفيذي محمول منخفض المستوى (PE)، أو بتنسيق ملف كائن مشترك ( COFF )، أو بتنسيق قابل للتنفيذ والربط (ELF)، أو كود كائن Mach-O . يتكون برنامج HLABE بشكل أساسي من عبارات إرسال البيانات (بايت)، وعبارات عناوين قابلة لإعادة التموضع 32 بت ، وتعليمات نقل التحكم x86، وتوجيهات متنوعة. بالإضافة إلى ترجمة عبارات البايت وعناوين إعادة التموضع إلى تنسيق كود الكائن منخفض المستوى، يتولى HLABE أيضًا تحسين إزاحة التفرع (اختيار أقصر شكل ممكن لتعليمات التفرع).

على الرغم من أن HLABE مُدمج في مُصرّف HLA v2.x، إلا أنه منتج منفصل. وهو مُتاح للجميع ومفتوح المصدر (مُستضاف على SourceForge.net ).

انظر أيضاً

ملحوظات

  1. " فن برمجة لغة التجميع " . مؤرشف من الأصل بتاريخ 29-03-2018 . تم الاطلاع عليه بتاريخ 12-02-2010 .

مراجع

للمزيد من القراءة

  • بول بانكس (29 يونيو 2005)، HLA: لغة برمجة التجميع عالية المستوى ، مجلة لينكس