مجمعات
Assemblers - Assembleurs
المجمِّـعـات
المجمِّعassembler هو برنامج يقوم بترجمة البرنامج المصدري التجميعي assembly source program المكتوب بلغة التجميع، والذي يتألف من مجموعة من التعليمات التجميعية، ويشكل ملفاً نصِّياً لايمكن تنفيذه ويملك الامتداد ASM إلى رماز الآلة machine code المكافئ للتعليمات التجميعية والذي يشكل عندئذٍ مايعرف بالبرنامج الهدف object program الذي يملك الامتداد OBJ، ويحتاج هذا البرنامج الهدف إلى بعض عمليات العنونة الإضافية بوساطة برنامج الربط linker للحصول على البرنامج التنفيذي ذي الامتداد EXE أو COM.
لغة التجميع
يكتب المبرمجون تعليماتهم بلغات مختلفة للبرمجة [ر. لغات البرمجة]، بعضها مفهوم مباشرة من قبل الحاسوب، وبعضها الآخر يحتاج إلى خطوات ترجمة وسيطة. وتستخدم حالياً مئات من لغات البرمجة، يمكن تقسيمها إلى ثلاثة أنواع: لغات الآلة، لغات التجميع، اللغات عالية المستوى. يستطيع الحاسوب أن يفهم مباشرة لغة الآلة الخاصة به التي هي لغته الطبيعية، وهي اللغة المعَّرفة من قبل البنية الصلبة للحاسوب ولها علاقة مباشرة بمجموعة تعليمات المعالج المستخدم، وتتألف لغات الآلة عموماً من مجموعات من الأصفار والواحدات التي تعطي الأوامر للحاسوب وترتبط بالآلة ارتباطاً وثيقاً؛ بمعنى أن لغة آلة ما يمكن أن تستخدم فقط مع نوع محدد فقط من الحواسيب. ومع انتشار الحواسيب تبين بطء عملية البرمجة بلغة الآلة وصعوبتها، وبدلاً من استخدام مجموعات الأصفار والواحدات التي يفهمها الحاسوب مباشرة بدأ المبرمجون باستخدام مصطلحات قريبة من اللغة الإنكليزية للتعبير عن الأوامر المعطاة للحاسوب، وتمثل هذه المصطلحات الأساس التي انطلقت منه لغات التجميع التي ترتبط بالآلة ارتباطاً وثيقاً. ومن ثمّ فإن لكل عائلة معالجات لغة تجميع خاصة بها؛ وذلك لأن تعليمات لغة التجميع مصممة لتتوافق مع تعليمات لغة الآلة لحاسوب معين ومع بنية هذا الحاسوب. إن لغة التجميع هي لغة منخفضة المستوى low- level language لأنها قريبة من لغة الآلة من حيث التركيب والوظيفة، وكل تعليمة بلغة التجميع تقابل تعليمة واحدة بلغة الآلة، وكل تعليمة بإحدى اللغات العالية المستوى مثل باسكال، C++ ..... تترجم إلى مجموعة من التعليمات بلغة الآلة [ر. المترجمات].
تتميز البرامج المكتوبة بلغات التجميع بسرعة تنفيذها وصغر حجم الذاكرة التي تحتاج إليها، والمجمِّع هو برنامج يحول البرنامج المصدري المكتوب بلغة التجميع إلى برنامج هدفي مكتوب بلغة الآلة؛ لذلك فهو مرتبط على نحو وثيق ببنية الآلة مع الأخذ في الحسبان وجود بعض النواحي فيه غير مرتبطة ببنية الآلة. إن أكثر المجمِّعات شهرة بالنسبة إلى عائلة المعالجات إنتل Intel هي: (Microsoft assembler) MASM لشركة ميكروسوفت Microsoft، وآي بي إم IBM ، وتاسم TASM (Borland turbo assembler)، وASM 86 .
وظائف المجمِّع وعمله
ـ تحويل العمليات الرمزية إلى مكافآتها من عمليات الآلة.
ـ تحويل المعاملات الرمزية إلى مكافآتها من عنوانات الآلة.
ـ تشكيل تعليمات الآلة بصيغها المناسبة.
ـ تحويل ثوابت المعطيات المستخدمة في البرنامج المصدري إلى مايكافئها من أصفار 0s وواحدات 1s.
ـ كتابة البرنامج الهدفي وملف الجدولة listing file ذي الامتداد LST الذي يحتوي على البرنامج الهدفي والبرنامج الرصدي وبعض المعلومات الأخرى المفيدة، وملف إسناد الرجوع الأولي cross-reference file ذي الامتداد CRF للمجمع MASM والامتداد XRF للمجمع TASM، والذي يحتوي على رموز تساعد على إنشاء ملف جدول إسناد الرجوع النهائي cross - reference listing file ذي الامتداد REF الذي يفيد في الرجوع إلى أماكن استخدام جميع حقول المعطيات واللافتات label والرموز في البرنامج.
يقوم المجمع عموماً بطورين من الإمرار pass خلال معالجة البرنامج المصدري، ويعود السبب الرئيسي في ذلك إلى احتمال وجود الإسناد الأمامي forward reference، وهو مصادفة المجمِّع لتعليمة تستخدم لافتة أو اسم حقل معطيات لم يجد المجمع تعريفها بعد. يقوم المجمع خلال عملية الإمرار الأولى بقراءة البرنامج المصدري كله لبناء جدول يحوي أسماء حقول المعطيات واللافتات المستخدمة ومواقعها النسبية في البرنامج، كما تحدد هذه العملية حجم رماز الآلة الذي سيتم توليده. يتميز المجمع MASM ببدء توليده لرماز الآلة خلال عملية الإمرار الأولى، في حين يقوم المجمِّع TASM بذلك في عملية الإمرار الثانية. بعد الانتهاء من تشكيل جدول الرموز يستطيع المجمِّع معرفة أي لافتة حتى وإن لم يأت تعريفها قبل استخدامها في إحدى التعليمات (يُصادف ذلك مثلاً في تعليمة قفز نحو لافتة أمامية). يستخدم المجمع في عملية الإمرار الثانية جدول الرموز السابقة لتحديد الطول والموقع النسبي لكل تعليمة أو حقل معطيات بغية إكمال رماز الهدف لكل تعليمة. ويشكل بعد ذلك ملفات الهدف object والجدولة listing وإسناد الرجوع الأولي cross-reference.
يُحتاج إلى ملف الجدولة عندما يُفحص رماز الآلة المولدة، ويقوم المجمِّع بعد جدولة البرنامج المصدري بوضع قائمة المقاطع والمجموعات segment and group table التي تبين المقاطع (حيث إن البرنامج بلغة التجميع يتألف من مقطع المعطيات ومقطع التعليمات ومقطع المكدس) ومجموعات المقاطع التي لها النوع نفسه والتي تم تعريفها ضمن البرنامج المصدري. وتتضمن هذه القائمة صفات جميع المقاطع والمجموعات الواردة في البرنامج المصدري، حيث يبين فيها طول كلٍ منها مقدراً بعدد البايتات التي تشغلها ونوع الرصف alignment ونوع الدمج combine ونوع الصنف class الخاص بها. كما يقوم المجمِّع بوضع أصول الرموز symbols table التي توفر أسماء حقول المعطيات الواردة في مقطع المعطيات واللافتات المستعملة في مقطع التعليمات وأسماء الإجرائيات ونوعها وعنوان إزاحتها offset.
يُستخدم ملف إسناد الرجوع الأولي لإنشاء ملف جدول إسناد الرجوع النهائي للافتات وأسماء حقول المعطيات والرموز المستخدمة في البرنامج المصدري، ويلاحظ في هذا الجدول ورود كل ما ذكر حسب الترتيب الأبجدي، وعلى يمينها تظهر أرقام أسطر البرنامج المصدري التي عُرفت واستخدمت فيه، ويشير الرقم الأول إلى رقم السطر الذي عرف فيه العنصر في الملف LST، أما بقية الأرقام على يمينه فتشير إلى مكان استخدامها من قبل التعليمات، ويقوم بعملية إنشاء ملف جدول إسناد الرجوع النهائي أحد البرامج المرفقة مع برامج المجمِّع، وهو برنامج CREF في مجمِّع شركة ميكروسوفت وآي بي إم IBM وبرنامج TCREF في مجمِّع شركة بورلاند Borland.
يستطيع برنامج المجمِّع كشف أخطاء البرمجة المخالفة لقواعد استخدام اللغة بتشخيصه هذه الأخطاء وإرسال الرسائل التحذيرية.
ربط البرنامج
تأتي خطوة ربط البرنامج linking بعد إيجاد الرماز الهدفي للبرنامج بإنجاز العمليات الآتية:
ـ إكمال العنوانات كافة التي ترك المجمِّع أماكنها فارغة في الملف الهدفي، حيث إن المجمِّع لايستطيع وضع عنواناتها الفعلية؛ لأن البرنامج يمكن أن يُحمَّل في أي موقع مناسب في الذاكرة.
ـ ضم البرامج التي تؤلف وحدات مستقلة والتي تم تجميع كل منها على نحو منفصل في برنامج واحد قابل للتنفيذ، ويُحتاج إلى تلك العملية عند دخول أحد برامج اللغة التجميعية في بنية برنامج مكتوب بلغة عالية المستوى، أو عندما يكون برنامج اللغة التجميعية مؤلفاً من برنامجين اثنين على الأقل.
ـ تشكيل البرنامج التنفيذي EXE وتهيئته بالتعليمات اللازمة لتحميله عند تنفيذه.
ـ تشكيل خريطة الربط link map وهو بمنزلة ملف يبين طول كل مقطع وعنوان الإزاحة لبداية ونهاية الخاص به وعنوان أول تعليمة ستنفذ في البرنامج.
من أشهر برامج الربط البرنامج LINK الخاص بشركتي آي بي إم وميكرسوفت والبرنامج TLINK الخاص بشركة بورلاند.
تطبيقات المجمع
يُستخدم المجمع حيث تستخدم لغة التجميع، فمثلاً تستخم لغة التجميع للوصول المباشر إلى البنية الصلبة للحاسوب ونظام التشغيل والمهام التي تحتاج إلى سرعة وفي الأنظمة المضمنة وغير ذلك.
مازن محايري
Assemblers - Assembleurs
المجمِّـعـات
المجمِّعassembler هو برنامج يقوم بترجمة البرنامج المصدري التجميعي assembly source program المكتوب بلغة التجميع، والذي يتألف من مجموعة من التعليمات التجميعية، ويشكل ملفاً نصِّياً لايمكن تنفيذه ويملك الامتداد ASM إلى رماز الآلة machine code المكافئ للتعليمات التجميعية والذي يشكل عندئذٍ مايعرف بالبرنامج الهدف object program الذي يملك الامتداد OBJ، ويحتاج هذا البرنامج الهدف إلى بعض عمليات العنونة الإضافية بوساطة برنامج الربط linker للحصول على البرنامج التنفيذي ذي الامتداد EXE أو COM.
لغة التجميع
يكتب المبرمجون تعليماتهم بلغات مختلفة للبرمجة [ر. لغات البرمجة]، بعضها مفهوم مباشرة من قبل الحاسوب، وبعضها الآخر يحتاج إلى خطوات ترجمة وسيطة. وتستخدم حالياً مئات من لغات البرمجة، يمكن تقسيمها إلى ثلاثة أنواع: لغات الآلة، لغات التجميع، اللغات عالية المستوى. يستطيع الحاسوب أن يفهم مباشرة لغة الآلة الخاصة به التي هي لغته الطبيعية، وهي اللغة المعَّرفة من قبل البنية الصلبة للحاسوب ولها علاقة مباشرة بمجموعة تعليمات المعالج المستخدم، وتتألف لغات الآلة عموماً من مجموعات من الأصفار والواحدات التي تعطي الأوامر للحاسوب وترتبط بالآلة ارتباطاً وثيقاً؛ بمعنى أن لغة آلة ما يمكن أن تستخدم فقط مع نوع محدد فقط من الحواسيب. ومع انتشار الحواسيب تبين بطء عملية البرمجة بلغة الآلة وصعوبتها، وبدلاً من استخدام مجموعات الأصفار والواحدات التي يفهمها الحاسوب مباشرة بدأ المبرمجون باستخدام مصطلحات قريبة من اللغة الإنكليزية للتعبير عن الأوامر المعطاة للحاسوب، وتمثل هذه المصطلحات الأساس التي انطلقت منه لغات التجميع التي ترتبط بالآلة ارتباطاً وثيقاً. ومن ثمّ فإن لكل عائلة معالجات لغة تجميع خاصة بها؛ وذلك لأن تعليمات لغة التجميع مصممة لتتوافق مع تعليمات لغة الآلة لحاسوب معين ومع بنية هذا الحاسوب. إن لغة التجميع هي لغة منخفضة المستوى low- level language لأنها قريبة من لغة الآلة من حيث التركيب والوظيفة، وكل تعليمة بلغة التجميع تقابل تعليمة واحدة بلغة الآلة، وكل تعليمة بإحدى اللغات العالية المستوى مثل باسكال، C++ ..... تترجم إلى مجموعة من التعليمات بلغة الآلة [ر. المترجمات].
تتميز البرامج المكتوبة بلغات التجميع بسرعة تنفيذها وصغر حجم الذاكرة التي تحتاج إليها، والمجمِّع هو برنامج يحول البرنامج المصدري المكتوب بلغة التجميع إلى برنامج هدفي مكتوب بلغة الآلة؛ لذلك فهو مرتبط على نحو وثيق ببنية الآلة مع الأخذ في الحسبان وجود بعض النواحي فيه غير مرتبطة ببنية الآلة. إن أكثر المجمِّعات شهرة بالنسبة إلى عائلة المعالجات إنتل Intel هي: (Microsoft assembler) MASM لشركة ميكروسوفت Microsoft، وآي بي إم IBM ، وتاسم TASM (Borland turbo assembler)، وASM 86 .
وظائف المجمِّع وعمله
ـ تحويل العمليات الرمزية إلى مكافآتها من عمليات الآلة.
ـ تحويل المعاملات الرمزية إلى مكافآتها من عنوانات الآلة.
ـ تشكيل تعليمات الآلة بصيغها المناسبة.
ـ تحويل ثوابت المعطيات المستخدمة في البرنامج المصدري إلى مايكافئها من أصفار 0s وواحدات 1s.
ـ كتابة البرنامج الهدفي وملف الجدولة listing file ذي الامتداد LST الذي يحتوي على البرنامج الهدفي والبرنامج الرصدي وبعض المعلومات الأخرى المفيدة، وملف إسناد الرجوع الأولي cross-reference file ذي الامتداد CRF للمجمع MASM والامتداد XRF للمجمع TASM، والذي يحتوي على رموز تساعد على إنشاء ملف جدول إسناد الرجوع النهائي cross - reference listing file ذي الامتداد REF الذي يفيد في الرجوع إلى أماكن استخدام جميع حقول المعطيات واللافتات label والرموز في البرنامج.
يقوم المجمع عموماً بطورين من الإمرار pass خلال معالجة البرنامج المصدري، ويعود السبب الرئيسي في ذلك إلى احتمال وجود الإسناد الأمامي forward reference، وهو مصادفة المجمِّع لتعليمة تستخدم لافتة أو اسم حقل معطيات لم يجد المجمع تعريفها بعد. يقوم المجمع خلال عملية الإمرار الأولى بقراءة البرنامج المصدري كله لبناء جدول يحوي أسماء حقول المعطيات واللافتات المستخدمة ومواقعها النسبية في البرنامج، كما تحدد هذه العملية حجم رماز الآلة الذي سيتم توليده. يتميز المجمع MASM ببدء توليده لرماز الآلة خلال عملية الإمرار الأولى، في حين يقوم المجمِّع TASM بذلك في عملية الإمرار الثانية. بعد الانتهاء من تشكيل جدول الرموز يستطيع المجمِّع معرفة أي لافتة حتى وإن لم يأت تعريفها قبل استخدامها في إحدى التعليمات (يُصادف ذلك مثلاً في تعليمة قفز نحو لافتة أمامية). يستخدم المجمع في عملية الإمرار الثانية جدول الرموز السابقة لتحديد الطول والموقع النسبي لكل تعليمة أو حقل معطيات بغية إكمال رماز الهدف لكل تعليمة. ويشكل بعد ذلك ملفات الهدف object والجدولة listing وإسناد الرجوع الأولي cross-reference.
يُحتاج إلى ملف الجدولة عندما يُفحص رماز الآلة المولدة، ويقوم المجمِّع بعد جدولة البرنامج المصدري بوضع قائمة المقاطع والمجموعات segment and group table التي تبين المقاطع (حيث إن البرنامج بلغة التجميع يتألف من مقطع المعطيات ومقطع التعليمات ومقطع المكدس) ومجموعات المقاطع التي لها النوع نفسه والتي تم تعريفها ضمن البرنامج المصدري. وتتضمن هذه القائمة صفات جميع المقاطع والمجموعات الواردة في البرنامج المصدري، حيث يبين فيها طول كلٍ منها مقدراً بعدد البايتات التي تشغلها ونوع الرصف alignment ونوع الدمج combine ونوع الصنف class الخاص بها. كما يقوم المجمِّع بوضع أصول الرموز symbols table التي توفر أسماء حقول المعطيات الواردة في مقطع المعطيات واللافتات المستعملة في مقطع التعليمات وأسماء الإجرائيات ونوعها وعنوان إزاحتها offset.
يُستخدم ملف إسناد الرجوع الأولي لإنشاء ملف جدول إسناد الرجوع النهائي للافتات وأسماء حقول المعطيات والرموز المستخدمة في البرنامج المصدري، ويلاحظ في هذا الجدول ورود كل ما ذكر حسب الترتيب الأبجدي، وعلى يمينها تظهر أرقام أسطر البرنامج المصدري التي عُرفت واستخدمت فيه، ويشير الرقم الأول إلى رقم السطر الذي عرف فيه العنصر في الملف LST، أما بقية الأرقام على يمينه فتشير إلى مكان استخدامها من قبل التعليمات، ويقوم بعملية إنشاء ملف جدول إسناد الرجوع النهائي أحد البرامج المرفقة مع برامج المجمِّع، وهو برنامج CREF في مجمِّع شركة ميكروسوفت وآي بي إم IBM وبرنامج TCREF في مجمِّع شركة بورلاند Borland.
يستطيع برنامج المجمِّع كشف أخطاء البرمجة المخالفة لقواعد استخدام اللغة بتشخيصه هذه الأخطاء وإرسال الرسائل التحذيرية.
ربط البرنامج
تأتي خطوة ربط البرنامج linking بعد إيجاد الرماز الهدفي للبرنامج بإنجاز العمليات الآتية:
ـ إكمال العنوانات كافة التي ترك المجمِّع أماكنها فارغة في الملف الهدفي، حيث إن المجمِّع لايستطيع وضع عنواناتها الفعلية؛ لأن البرنامج يمكن أن يُحمَّل في أي موقع مناسب في الذاكرة.
ـ ضم البرامج التي تؤلف وحدات مستقلة والتي تم تجميع كل منها على نحو منفصل في برنامج واحد قابل للتنفيذ، ويُحتاج إلى تلك العملية عند دخول أحد برامج اللغة التجميعية في بنية برنامج مكتوب بلغة عالية المستوى، أو عندما يكون برنامج اللغة التجميعية مؤلفاً من برنامجين اثنين على الأقل.
ـ تشكيل البرنامج التنفيذي EXE وتهيئته بالتعليمات اللازمة لتحميله عند تنفيذه.
ـ تشكيل خريطة الربط link map وهو بمنزلة ملف يبين طول كل مقطع وعنوان الإزاحة لبداية ونهاية الخاص به وعنوان أول تعليمة ستنفذ في البرنامج.
من أشهر برامج الربط البرنامج LINK الخاص بشركتي آي بي إم وميكرسوفت والبرنامج TLINK الخاص بشركة بورلاند.
تطبيقات المجمع
يُستخدم المجمع حيث تستخدم لغة التجميع، فمثلاً تستخم لغة التجميع للوصول المباشر إلى البنية الصلبة للحاسوب ونظام التشغيل والمهام التي تحتاج إلى سرعة وفي الأنظمة المضمنة وغير ذلك.
مازن محايري