|
أما إذا اقتربنا من لغة الآلة
واستخدمنا لغة التجميع ، فنجد أننا
نخسر المرونة والعمومية . فلغة التجميع
تفتقر إلى التجريد ومن الصعوبة بمكان
تعديل جزء من برنامج مكتوب بها دون
إعادة النظر في باقي أجزائه . كما أنها
تحاكي ، بطبيعتها ، نوع الجهاز الذي
تعمل عليه لدرجة أن أي تغيير في
الأجهزة الملحقة بالحاسب ( مثل نوع
الشاشة ) غالباً ما يستوجب إعادة صياغة
بعض تعليمات البرنامج . أما من الناحية
الإيجابية ، فإن لغة التجميع تكسبنا
سرعة (
Speed
)
وسلطة (
Power
)
لا مثيل لهما في اللغات عالية المستوى .
أما السرعة ، فتنتج من أن برامج لغة
التجميع تخاطب المعالج المركزي (
CPU
) مباشرة
ودون وسيط ( مترجم ) .
فإذا
كنت على دراية تامة بمزايا هذا المعالج
( نقاط ضعفه ونقاط قوته ) أمكنك صياغة
برنامجك بحيث تستفيد من نقاط قوته
وتتجنب نقاط ضعفه . أما المترجم ، فلقد
صمم لترجمة أي برنامج كيفما تمت صياغته
وبالتالي لن يستطيع ، في كل الحالات ،
أن يجاري برامج لغة التجميع سرعة
وكفاءة .
إن
انعدام الوسيط بين البرنامج المجمع
والحاسب يؤدي أيضاً إلى زيادة سلطة هذا
البرنامج على الجهاز . إذ إن المترجم ،
كأي برنامج آخر ، يفرض على المبرمج
شروطاً وقواعد خاصة به وباللغة التي
يترجمها . هذه الشروط تؤدي بشكل مباشر
إلى الحد من مجال العمليات التي يمكن
للمبرمج أن يطلبها . فمترجم لغة باسيك
مثلاً ، يمنع المبرمج من " تدوير "
البتات التي يتكون منها عدد ما ( لأن
مثل هذه العملية ليست من مفردات لغة
باسيك ) رغم أن المعالج المركزي في
الجهاز يستطيع أن يقوم بهذه العملية .
وكذلك نجد أن مترجم برامج باسكال لا
يسمح بوضع قفل (
Lock
) على أحد
الملفات المخزنة على قرص مركزي يشترك
في استعماله عدة مستخدمين ، رغم أن
المعالج المركزي ونظام التشغيل يسمحان
بهذه العملية . ولكن ، لنتذكر أن القدر
الكبير من السلطة والتحكم الذي توفره
لنا لغة التجميع لا يأتي مجاناً ، بل
تصاحبه مسؤولية كبيرة . فمع زيادة
السلطة يزداد العبء ويجدر الحذر .
فالسلطة
التي تمكنك من قراءة أي قطاع من القرص
بسهولة ، مثلاً ، تتيح لك تخريب سائق
الاسطوانات تخريباً تاماً ، وبنفس
السهولة !
لماذا
نستعملها ؟
لقد
رأينا أن لغة التجميع تفتقر إلى
المرونة ( مما يجعل كتابة وصيانة
برامجها صعبة نسبياً ) وإلى العمومية (
التي تجبرنا على إعادة كتابة نفس
البرنامج كلما تغير الجهاز ) وأنها
تتطلب توخي الحذر وتحمل قدر كبير من
المسؤولية ( إذ بدونها يمكن للبرنامج
أن يعطب الجهاز ) . فإذا ابتلت لغة بهذا
الوابل من المساويء ، جاز لنا أن نطرح
السؤال : لماذا نستعملها أصلاً ؟
هذا حقاً سؤال وجيه . ونحن في
الواقع نسعى دائماً إلى تجنب لغة
التجميع إلا عند الضرورة القصوى ، حين
تكون ميزاتها ( السرعة والسلطة ) أساسية
لعمل النظام . ففي نظم الزمن الحقيقي (
Real
time systems
)
مثلاً ( كنظام الطيار الآلي ونظم
الدفاع الجوي ونظم التحكم الصناعي )
تكون سرعة النظام هي معيار نجاحه أو
فشله ، ولذا لابد من الاستعانة بلغة
التجميع للوصول إلى السرعة المنشودة .
وحتى عندما لا تكون السرعة أساسية بكل
معنى الكلمة لعمل النظام ، قد نضطر إلى
استخدام لغة التجميع ، جزئياً ، في
برامجنا لتحقيق المواصفات المطلوبة من
المستعمل أو محلل النظم ( كما يحدث في
التطبيقات التجارية عندما نفرز
Sort
عدداً كبيراً من البيانات ) .
أما
الموجب الثاني
لاستخدام هذه اللغة فهو السلطة التامة على الجهاز أو أحد ملحقاته .
فعند كتابة برنامج متعدد المستعملين (
multi -
user
) ،
كثيراً ما نضطر إلى وضع قفل على أحد
سجلات ملف ، لكي لا نسمح لمستخدم آخر أن
يكتب عليه أثناء عملنا . وكما نوهنا
سابقاً فإن لغة باسكال القياسية لا
تؤمن هذه الخدمة / مما يضطرنا إلى
تنفيذها بلغة التجميع .
وبشكل
عام ، فإن أي تحوير في عمليات الإدخال
أو الإخراج القياسية سيضطرنا إلى
استخدام لغة التجميع ، ولو جزئياً في
برامجنا .
ولقد
ظهر مؤخراً موجب ثالث
لاستخدام هذه اللغة ، لا ينبثق من ميزاتها الأساسية ( سرعة + سلطة ) ،
بل من السرعة المذهلة التي تتطور بها تقنية الحاسبات في الآونة الأخيرة
. إذ لم تستطع الشركات المصنعة لبرامج النظم ( وعلى رأسها المؤلفات )
مواكبة سرعة تطور الأجهزة (Hardware)
بل تختلف عنها بفارق يصل في بعض
الأحيان إلى خمس سنوات! فنجد مثلاً ، أن
مؤلفات اللغات الشهيرة لم تستطع
التعامل مع المعالج الحاسبي المساعد (
arithmetic
co-processor
)
من النوع 8087
أو 80287
إلا عام 1986م
، رغم أن هذا المعالج ظهر إلى الأسواق في أوائل الثمانينات . وها قد
مضى الآن أكثر من عامين على ظهور أجهزة
PS/2
،
دون أن يظهر أي مؤلف يستفيد من مزاياها الكبيرة . أما على مستوى لغة
التجميع ، فالصورة مختلفة :
إذ إن هذه اللغة لا تحتاج إلى مترجم بكل معنى الكلمة ، بل كل ما تحتاج
إليه هو قاموس صغير لمرادفات جملها بلغة الآلة . ومن السهولة بمكان
توفير هذا القاموس ( أي المجمع ) مع كل جهاز أو نظام تشغيل جديد . لهذا
تمكن مستعملوا هذه اللغة من تقديم برامج متطورة تواكب كل جديد في تقنية
الحاسب ، سابقين بذلك من أصر على استخدام لغات المستوى الأعلى .
نخلص إذن بأن علينا تجنب استخدام
لغة التجميع إلا في الحالات الثلاث
الآنفة الذكر . ونضيف هنا أنه حتى في
تلك الحالات ، علينا أن نعمد
لاستخدامها جزئياً ، أي كبرنامج فرعي ،
يتم طلبه من البرنامج الرئيسي الذي
يكتب بلغة عالية أو حديثة .
أخذ
هذا الموضوع من كتاب البرمجة بلغة
التجميع (الدكتور حمزة الروماني)
|