لماذا يجب ان تتعلم لغة الاسمبلي

لغة الاسمبلي لها سمعة  سيئة بين المبرمجين وطلاب علوم الحاسب بأنها لغة صعبه وانها غير مفيده وان العالم اصبح متطور واكثر حداثة وسهولة مع لغات البرمجه العاليه المستوى مثل بايثون وجافا  لذلك لا تضيع وقتك في تعلمها .. ): فهل هذا صحيح وهل لغة الاسمبلي غير مفيده ؟

في البداية دعونا نلقي نظره على هذه الصوره التي توضح مستويات لغات البرمجه

مصدر الصورة

كما هو واضح من الصورة ان الهيكلية الحاليه للغات البرمجه عباره عن مستويات متعددة كل مستوى تم بناءة على مستوى اسفل منه , بعبارة اخرى المستوى العلوي يعتمد على المستوى السفلي وهكذا حتى الوصول الى الـ Hardware . لغات OOP مثل الجافا مبنية على لغات اسفل منها مثل لغة الـ C كذلك لغة C تعتمد على لغة Assembly ولغة الاسمبلي ايضا يتم ترجمتها الى طبقات اكثر تعقيد حتى الوصول المكونات الفيزيائة للحاسوب , لذلك لا يمكن أن نسأل ماهي لغه الاسمبلي ولماذا هي موجوده بسبب ان لغة الاسمبلي كانت الطبقة الاولى التي  اُعتمد عليها سابقا ثم تطورت علوم الحاسب الى الاعلى قليلا ويتم التركيز على تسهيل التعليمات والانتاجيه فتم الصعود الى الاعلى وهكذا حتى وصلنا لما نحن عليه ,هذا يعني ان لغة الاسمبلي هي  الاساس لا يمكن حذفه او استبعاده لان كل شي سوف ينهار , ربما يمكن ان نغير صغية السوال الى التالي “هل سوف استخدم لغة الاسمبلي مع هذا التطوير واللغات الرائعه حاليا ؟” في هذه الحالة السؤال منطقي نوعا ما  .

كما هو موضح في الصورة ان لغه الاسمبلي قريبة الى المعالج اكثر من اللغات العالية المستوى , هذا يعني انها الطبقة التي تخاطب المعالج وهي اقرب الى المعالج اكثر من تلك التي في الاعلى , هذا يعني ان لغة الاسمبلي هي جسر بين ماهو في الاعلى (لغات عالية المستوى ) وما هو في الاسفل (المعالج) .

كيف يتم ترجمه البرامج المكتوبة بلغات عالية المستوى ؟

مصدر الصورة

عندما يتم كتابة برنامج بلغة ++C , الكود لا يبقى كما بل يتم تحويلة الى طبقات اسفل منها مروراً بالاسمبلي , هذا يعني ان كل شي في الاخير سوف يتم التعامل معه على اساس تعليمات منخفضه المستوى مثل اسمبلي . لذلك التطوير مستمر على لغه الاسمبلي بواسطة الشركات التي تقوم بتصنيع الهاردوير مثل انتيل و AMD فهذه الشركات هي اكثر الشركات التي تهم بأصغر التفاصيل في لغة الاسمبلي و الـ low level بشكل عام  بسبب ان لغه الاسمبلي سوف تخاطب المعالج الذي يقومون بصنعه .

لنأتي الى اجابة السؤال : اذا كان لديك مشاريع تعتمد بشكل كلي على الهاردوير فسوف تحتاج ان تكتب برامجك بلغة يفهمها المعالج الذي تعمل عليه هذا طبعا ان لم يكن هناك framework تعمل عليه ويسهل لك العمليه , دعني اضرب لك مثال : اذا كنت انا اقوم بصنع روبوت يقوم بمسح ارضية المنزل , بالتاكيد سوف اشتغل على جزء الهاردوير واجزاء الروبوت والجانب البرمجي سوف يكون هناك Microcontroller مثل ARM 7 على سبيل المثال , الان احتاج ان اكتب البرنامج للجهاز الذي سوف يحدد حركه الروبوت وبعض الحسابات هنا نحتاج ان نكتب تعليمات اسمبلي .

لماذا لا يمكن كتابة لغات عالية لاجهزة منخفضه المستوى ؟

يمكن كتابة برامج بلغات عالية المتسوى ,, ليس هناك اي مشكلة ولكن ارجع الى اول صورة في هذه التدوينة سوف نجد انها عباره عن طبقات اذا اردت ان اكتب كود بلغة الجافا مثلا يجب عليا ان اوفر كل الطبقات التي بالاسفل حتى استطيع الوصول الى المعالج لا يمكن ابدا حذف اي طبقة, اذا يمكن توفير كل هذا فليس هناك اي مشكلة ولكن التكلفة سوف تزداد مع التعقيد الذي سوف يحصل لبناء نظام كامل مع complier ذكي لفهم اللغه العاليه المستوى , بالفعل هذا الامر موجود  مثل ان تستخدم لوحات الكترونيات تقدم لك خصائص قويه مثل الراسبري باي, ايضا يجب وضع بعين الاعتبار الاداء مرور بطبقة واحده افضل بكثير من المرور بثلاث او اربع طبقات و ربما اكثر . مشاريع صغيرة قد لا يكون الامر مهم جدا لاذكره هنا في هذه التدوينة ولكن انا اضع مفاهيم عامه نظريه باعتبار ان هدفي هو توضيح بعض المفاهيم الخاصة بلغة الاسبملي.  فهم لغة الاسمبلي مهم جدا قد لا تكتب اكواد وبرامج بلغة الاسمبلي الا اذا مشاريعك تتعامل مع الهاردوير بشكل مباشر او انك حصلت على وظيفة في انتيل اوشركة الكترونيات .

جانب اخر , اذا كنت مهندس برمجيات مخضرم خاصة مع لغات او برمجيات نظام التشغيل مثل مطوري نظام لينكس فيجب عليك ان تفهم التفاصيل الصغيره لما يحدث في البرنامج , ما اقصده هو الطبقة المنخفضه التي تكون فيها لغة الاسمبلي , بسبب احيانا  يكون هناك Bugs لا يتم اكتشاف سببها بسهولة لذلك يكون هناك حاجه الى النزول الى الاسفل ورؤية ماذا يحدث وما يسبب المشكلة , فكيف سوف نحل المشاكل ونفهم التفاصيل الدقيقه دون معرفة واسعة بلغه الاسمبلي والمعمارية المنخفضه للهاردوير.

الجانب الاخير والذي انا اتعلم لغة الاسمبلي له  هو أمن المعلومات .  تخصصات امن المعلومات كثيرة ومتفرعة منها:

  • Reverse Engineering
  • Malware analysis
  • Digital forensics

هذه ثلاث اقسام رئيسية لها علاقة بلغة الاسمبلي بشكل مباشر , اذا اردنا ان نقوم بعمل تحليل لملف خبيث يجب ان نحلل الجانب السفلي من التعليمات الخاصه به وفهم معمارية الملف وكل شي تقريبا وهذا مستحيل دون فهم لغة الاسمبلي , سيناريو اخر في التحقيق الجنائي الرقمي عندنا نقوم بعمل Memory forensics يجب ان نعرف الـ Memory layout وكيف يتم تقسيم وتخزين البيانات في الذاكرة والوصول الى الذاكره من البرنامج والتي لا يمكن تعلمها الا في كتب تشرح لغة الاسمبلي و low level .

الخلاصة :

اذا اردت ان تفهم الحاسب بشكل اكبر وكيف يتم التعامل مع المعالج للتمكن من اكتشاف الاخطاء الغامضه في البرمجيات المعقدة او الخوض في استغلال الثغرات والاختراق والهندسه العكسيه …. الخ . اسمبلي لا بد منها

 

قد ترغب بقراءة التدوينة ” كيفة البدء بتعلم لغة اسمبلي”

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.