نمور مصر
مرحبا عزيزى الزائر فى منتدى نمور مصر هذه الرسالة تفيد على انك غير مسجل بالمنتدى يمكنك التسجيل الان مجانا



 
الرئيسيةالبوابةس .و .جبحـثالأعضاءالمجموعاتالتسجيلدخول
Animated  Sparkly Love Heart

شاطر | 
 

 دروس في الاسمبلي

اذهب الى الأسفل 
كاتب الموضوعرسالة
tito501
مدير المنتدى
مدير المنتدى
avatar

ذكر عدد المساهمات : 354
نقاط : 1047
تاريخ التسجيل : 28/03/2010
الموقع : egypttiger1.mama9.com

الاضافات
البيانات:

مُساهمةموضوع: دروس في الاسمبلي   الثلاثاء يونيو 15, 2010 11:20 pm

السلام
عليكم


دروس في لغة الاسمبلي لكي تصبح محترف مجموعة كتب
وامثلة




- في البداية لنقم بتوضيح بعض الامور المتعلقة بالاسمبلي, فالاسمبلي من
اقدم اللغات التي عرفها مجال البرمجة فهي تلي لغة الالة machine language
في صعوبتها لكن في نفس الوقت تعد اسهل في التعامل من اجل التخاطب مع
الحاسب, بكافة اجزائه.

فالناحية الاولى التي يتم ذكرها لمن يريد تعلم الاسمبلي هو مسالة التخاطب
مع الاجهزة الملحقة بالحاسب.. من ميزات الاسمبلي:
1- السرعة في الاداة نظرا لان المجمع يقوم بتحويلها مباشرة الى لغة الالة.
2- الوضوح عند التنقيح حيث يمكن القول عن الشفرة المكتوبة بها بانها تتبع
نظام What you write is what you get, اي ما تكتب تحصل عليه, ليس هناك
اجرائيات تضاف من قبل المجمع كما في لغات اخرى مثل C او دلفي حيث يحمل اي
تطبيق من عشرين سطر مئات وربما الالاف الاسطر البرمجية المقابلة في
الاسمبلي وحدها فما بالك بمثل هذا على الكود المكتوب بلغة الالة.
3- قدرتها على الوصول الى كافة اجزاء الحاسب دون اي عائق امامها خصوصا فيما
يتعلق بمسالة كتابة محركات drivers مثل محركات VxD او Sys .. التي يكون من
المعقد جدا كتابتها في لغات مثل C مثلا لو لم تكن لديك الخبرة الكافية في
التعامل مع العتاد البرمجي..
4- "المحمولية" او portability, فبامكان تطبيق الاسمبلي ان يعمل على اي
نظام Windows دون اي اختلاف, المسالة فقط تتعلق بالمعالج المكتوب له
التطبيق, فتطبيقات الاسمبلي التي تم التصريح عنها انها مكتوبة لمعالجات 386
مثلا سيكون بامكانها استخدام التعليمات الخاصة بمعالج 286 وماقبله
بالاضافة الى تعليمات 386 لكن ليس بامكانها استخدام تعليمات اضيفت الى
المعالج 486 (حتى لو كان الجهاز يحوي على هذا المعالج.. هذا الامر غير
متعلق بتجهيزة جهاز الحاسب بالاصل لكنه متعلق بالناقلية التي سيتمتع بها
هذا البرنامج)
وبما انه في يومنا هذا لم تعد تجد تجهيزات حاسوبية مدارة على معالجات اقدم
من P3 فاذن يمكن فورا ان تقوم بالتصريح عن انك تريد ان تستخدم تعليمات
المعالج 586 دون خوف.

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

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

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

ناحية اخرى وهي تتعلق بالصيفة المكتوبة لتعليمات الاسمبلي.. فعلى الرغم من
تبسيطها لتكون بمثابة اختصارات لكلمات انكليزية معروفة تدل على معنى
التعليمة الا ان "شكل" الكود المكتوب بلغة الاسمبلي قد يجعل المرء يخشى ان
يبدأ بها, فمثلا تعليمة نقل البيانات mov, تعليمة الانتقال من عنوان لاخر
jxx (xx تستبدل بحروف معينة تتبع تعليمة النقل هل هي شرطية اي مرتبطة بوقوع
شرط معين ام غير شرطية مباشرة), تعليمة المقارنة cmp.. لاحظ كيف ان جميع
هذه التعليمات تعبر عن كلمات انكليزية معروفة MOVE, JUMP, COMPARE, الخ
المسالة الوحيدة التي يجب الاهتمام بها فيما يتعلق بالتعليمات فضلا عن
استخدامها هو الشروط المتعلقة باستخدام بعض التعليمات..

على سبيل المثال تعليمة النقل mov, لنفرض اني اريد ان انقل قيمة من عنوان
في الذاكرة الى اخر, ليس من الممكن في هذه الحالة ان استخدم التعليمة
بالشكل:


كود:
mov destination, sourceالشكل السليم لهذا الامر هو ان اقوم بوضع عنوان
المصدر source في احد المسجلات registers من ثم اقوم بالنقل.. بالشكل
التالي:


كود:
lea register, source ; load effective address of "source" as data
into "register"
mov destination, [register]; move data addressed by "register" to
"destination"فاذن الموضوع ليس بالصعوبة المتصورة اذ بالامكان معرفة كل هذه
الامور من خلال الاطلاع على ملف Intel opcodes المختصر الذي يوضح استخدام
كل تعليمة بالاضافة الى سرد للتفاصيل المتعلقة فيها كشروط الاستخدام (من
مسجل لموقع ذاكرة, من موقع ذاكرة لمسجل, من مسجل لمسجل ..) وبعض المعلومات
المتعلقة بعدد البايتات الذي تحجزه (لو كنا مهتمين بمسالة حجم الملف
النهائي) بالاضافة الى عدد دورات المعالج clocks (امور لا تلاحظها بالعين
المجردة لكنها تظهر واضحة على التطبيقات الضخمة فالبرامج المكتوبة بلغات
عالية المستوى تعاني من بعض البطئ المتعلق بالمعالجة مما يؤثر على فعالية
التطبيق بينما لا تعاني تطبيقات الاسمبلي من هذا الامر على الاطلاق ان شاء
الله بشرط الاستخدام الامثل للتعليمات وعدم الاكثار من عمليات مكررة او غير
ضرورية كان بالامكان اختصارها ببعض سطور)

هذا اكثر ما قد يعيب الاسمبلي بصراحة هذا لو كان بالامكان تصنيف هذه
الملاحظات على انها عيوب فهي مسائل يمكن تلافيها من خلال الاطلاع الذي يمكن
اعتباره من باب الالمام بالشئ وليس دراسة جدية تتطلب تركيز 100% لكن تبقى
مسالة الدراسة الجدية هي الافضل لمن كان محبا لتعلم هذه اللغة.
- بيئات البرمجة بالاسمبلي, 16, 32 و 64بت:


- الى هنا نكون قد انهينا بعض الافكار المتعلقة بالاسمبلي والتي تجعل الجدد
متخوفين منها, ناتي الان الى ذكر الجزء المتعلق ببيئات الاسمبلي وهي الى
الان ثلاثة: 16بت - 32بت - 64بت
بحق السماء ماذا يعني 16 او 32بت "anyway"!؟
ناتي هنا الى بعض المسائل المتعلقة بالعنونة وكيفية معالجتها من قبل
المعالج processor, من المعروف ان المعالجات القديمة لم تكن تملك سرعات
عالية كما هي عليه اليوم, لن ندخل في التفاصيل لكن فيما يتعلق بمسالة
معالجة البيانات فان المعالجات تلك كانت تقوم على عنونة بايتن فقط (كل بايت
= 8 بت فاذن 2 بايت = 16بت).
مسالة عنونة 2 بايت فقط تعني انه لنقل سلسلة من المحارف من مكان لاخر فان
المعالج كان يحتاج الى عدد دورات اكبر, لناخذ المثال التالي مثلا.. نلاحظ
كيف انه مع تطور المعالج اخذت الدورات تقل (واحيانا تزيد في بعض العمليات
وفقا لتركيب المعالج نفسه)





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

لذا مع ظهور 32بت ومؤخرا 64بت اصبح بامكان مبرمجي الاسمبلي تنفس الصعداء
لانه صار بالامكان لهم نقل البيانات بصورة اسهل.. فما بالك بنقل 8بايتات
مرة واحدة مع 64بت كانت تحتاج من قبل الى 4 دورات لحلقة ما مع 16بت او 2 مع
32بت!

من الاختلافات ايضا هو ان تطبيقات 16بت تكون محصورة بنظام DOS اي انها سوف
تقوم باستخدام المقاطعات البرمجية Interrupts ليتم تنفيذها, في حين تطبيقات
32بت و 64بت سوف تكون ذات طابع مرئي GUI اي انها ستحوي على نوافذ ورسائل
حوار ويتم استخدام الدوال البرمجية API الامر الذي يسهل حياة المبرمج

الاختلاف الاخر هو في كيفية تنفيذ الاوامر ومدى اختلاف التعليمات.. نظريا
لن تجد اختلاف كبير في التعليمات بين 16 او 32بت, تم اضافة القليل من
التعليمات التي قد لا تستخدمها بشكل اعتيادي.. اما فيما يتعلق بـ 64بت
فهناك العديد من الاختلافات الجوهرية التي تجعل مسالة الانتقال اليه مسالة
تحتاج الى تعامل جيد مع ما سبقه من لغات لتكون الاختلافات قليلة وصريحة.

هذا هو مفهوم 16, 32 او 64بت

- البرمجيات المستخدمة في كتابة تطبيقات الاسمبلي:
- الان ناتي الى البرمجيات المستخدمة لكتابة تطبيقات الاسمبلي, وهي برنامج
واحد يسمى "مجمع" Assembler, هذا المجمع يقسم داخليا الى تطبيقين,
Assembler + Linker - وقد تم شرح دورة حياة برنامج الاسمبلي من قبل في مقال
باسم "عملية التجميع وتنفيذ البرنامج" في سلسلة الاسمبلي التي يمكن
ايجادها في الارشيف.

فيما يخص الاسمبلر فالشائع استخدامه هو Masm, لكن هناك مجمعات اخرى رائدة
مثل Nasm, Tasm, Goasm, الخ والتي تمتلك كل منها ميزات وحسنات من الصعب علي
ذكرها لعدم استخدامي جميعها.

ايضا هناك برمجيات مخصصة لاضفاء بعض الحيوية على المجمعات + تزويد المبرمج
ببعض الامور المتقدمة التي بامكانه الاستفاده منها في كتابة تطبيقه كتزويده
بمحرر للملفات Resource اضافة الى قوائم واشرطة مرئية تحوي على تطبيقات
فردية مساعدة (هنا بالطبع نتكلم عن التطبيقات المرئية)

يجدر الاشارة هنا الى ان Masm شائع الاستخدام على Windows وهو يعمل عليه
فقط, بينما Nasm شائع الاستخدام على Linux وهو قادر على العمل على Windows
ايضا

للحصول على كلا المجمعين يمكن التوجه الى صفحات موقعهم الخاص:
Masm32 (الرقم يعني انه مخصص لـ 32بت





[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
(252.8 كيلو بايت, 82 قراءة)


____ التوقيع _____________


شبكة البطل دائما فى تقدم انشاء الله معكم الى الابد
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://egypttiger1.mam9.com
 
دروس في الاسمبلي
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
نمور مصر :: الكمبيوتر و الانترنت :: دروس الكمبيوتر و الانترنت-
انتقل الى: