الموضوع: = نسخ ولصق =
عرض مشاركة واحدة
قديم 20-01-18, 10:02 am   رقم المشاركة : 2
ملح ـوس
عضو فضي
 
الصورة الرمزية ملح ـوس





معلومات إضافية
  النقاط : 10
  المستوى :
  الحالة : ملح ـوس غير متواجد حالياً
Unhappy


للفائدة منقول:


تم النشر منذ 24 Oct 2013
لغة التجميع (Assembly Language)

السلام عليكم ورحمة الله وبركاته

أما بعد...

فبداية تعرفي علي البرمجة كانت كالتالي:

أنا من هواة برمجة الألعاب فكنت في البداية أستخدم البرامج المبتكرة لصنع الألعاب كصانع الألعاب (Game Maker 8 Professional Edition).
لكن بعد حين...أدركت أن برمجة الألعاب لا تعتمد علي البرامج البسيطة التي يستخدمها الإندي (Indie)-صانع الألعاب الذي ينشر ألعابه بنفسه-لأن إمكانية تحويل اللعبة من منصة لأخري يعتمد علي نوع لغة البرمجة التي تم اعتمادها في صناعة اللعبة فمثلا: ألعاب الكمبيوتر الشخصي (PC) واكس بوكس(Xbox)برمجتهما عن طريق لغة البرمجة C++ (C Plus Plus) أما الألعاب المحمول تعتمد علي برمجة الألعاب بنظام جافا (Java) و من هنا بدأت بالتعمق في لغات البرمجة.
لكن بعد هذا...قرأت مقالة علي المنتدي يوضح فيها كاتب الموضوع قيمة لغة التجميع (Assembly Language) وذكر مميزات عديدة للغة البرمجة و منها رغبت في تعلم لغة التجميع.

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

لذا أطلب من الإخوة الأعضاء أن يزودوني بالمعلومات عن برنامج المجمع (Assembler) و المتطلبات الأخري حتي أتمكن من استخدام لغة التجميع فأنا متلهف لمعرفة مزايا اللغة .









إجابات على هذا السؤال .

مصطفى 36a2
الدولة : :سوريا
اهتمامات:ربّي يسّر
قام بالرد منذ 24 Oct 2013

السلام عليكم أخي الكريم ...

أحيي فيك رغبتك للتعلم ..


وأرجو ألا تخمد أبداً

قبل الكلام عن لغة التجميع .. لا بد أن تعرف عن لغة الآلة .. لغة الآلة هي التعليمات التي يفهمها المعالج مباشرة ..

(وكل معالج له لغة آلة .. أي أن كل آلة لها لغة خاصة بها ..) الحاسوب يختلف عن المتحكم الصغري والمتحكم يختلف عن الموبايل ..

ولكن بما أن العمليات متشابهة .. ولها نفس الوظيفة تقريباً ... وتختلف فقط بالرمز المحجوز لهذه التعليمة ..

مثلاً .. افرض أن المعالج1 يقوم بعملية الجمع عندما نعطيه الرمز(الكود) 10101010 والمعالج2 يقوم بنفس العملية عندما نمرر له الرمز(الكود) 11111111 ..

من غير المعقول أن نحفظ التعليمات لكل المعالجات .. فهذا مضيع للوقت ..

تقوم لغة التجميع بالسماح للمبرمج بكتابة sum مثلاً .. ومن ثم تقوم بالترجمة إلى الكود الخاص بالمعالج بطريقة ما .. لا تهم المبرمج ..

إذا باختصار .. لغة التجميع تقوم بترجمة كلمات مفهومة من قبل المبرمج مباشرة إلى كلمات مفهوم من قبل المعالج ..



لغة التجميع تصنّف كلغة منخفضة المستوى ..أي أنها قريبة جداً من التعامل مع العتاد الصلب HardWare

والتعليمات فيها تتعامل مباشرة مع مسجلات المعالج Registers ومع عناوين المتحولات في الذاكرة ..



لغة C و ++C وباقي اللغات عالية المستوى تتيح لك كتابة تعليمات بسيطة أو استدعاء توابع جاهزة .. ولكن لا يمكن تنفيذ هذه التعليمات إلا بعد تحولها الى لغة التجميع ...

أي أن لغة C مثلاً .. تتيح لك كتابة تعليمات وتتكفل بترجمة هذه التعليمات إلى لغة التجميع .. إلى الكثييير من التعليمات بلغة التجميع ..

فمثلاً .. كتابة هذا السطر في C

printf("%i\n",(2*t*t*t+3*t*t+t)/6);
تكافئ كتابة الأسطر التالية في لغة التجميع :

mov eax,dword ptr [t]shl eax,1imul eax,dword ptr [t]imul eax,dword ptr [t]mov ecx,dword ptr [t]imul ecx,ecx,3imul ecx,dword ptr [t]add eax,dword ptr [t]add eax,ecxcdq mov ecx,6idiv eax,ecxmov esi,esppush eax push offset string "%i\n" (1579CCh)call dword ptr [__imp__printf (15C574h)]add esp,8cmp esi,espcall @ILT+1130(__RTC_CheckEsp) (14146Fh)


ليست لغة التجميع لغة صعبة ..بل هي من أبسط اللغات على الإطلاق .. فهي الأخفض مستوى .. ولكن كما ترى .. تكتب كثيراً وتحصل على القليل ..

أكرر .. ليس لأنها ضعيفة أو عاجزة .. فهكذا يعمل المعالج .. خطوة خطوة .. تعليمات بسيطة وسهلة جدا..

وأقرب اللغات تعاملاً مع لغة التجميع كما رأيت هي C .. حتى أنها تتيح لك الكتابة بلغة التجميع ..ضمن الكود ..



أما اللغات التي تعمل على منصّات منفصلة عن نظام التشغيل مثل Java ولغات .Net يتم تحويل الكود فيها إلى ما يسمّى byteCode وهي لغة الآلة الافتراضية ..

أي أنها لا تتعامل فوراً مع لغة الآلة التي تعمل عليها .. بل تتعامل مع برنامج يسمّى الآلة الافتراضية .. وهو يتعامل بدوره مع الآلة الحقيقية ( المعالج ) ..



أخيرا اسمح لي أن أقول :

من غير المعقول أن نقول : ( ميزات لغة التجميع ) فهذا ظلم كبير .. بل الصحيح أن نقول (ميزات البرمجة بلغة التجميع )

فكما رأيت لغة التجميع هي القاعدة التي نبني عليها جميع اللغات الأخرى .. ف


أرجو أن أكون قد أعطيتك فكرة واضحة عن مكان لغة التجميع في هرم لغات البرمجة .. ستحتاجها عندما تريد برمجة نظام تشغيل وليس عند تصميم لعبة مليئة بالرسوميات مثلاً ..

ستحتاجها إذا كنت تريد كتابة برنامج سريع جداً .. وطبعاً ستحتاجها إذا أردت فهم آلية عمل الحاسوب من الداخل ..

فإذا كان هذا ما تريده ..
بالتوفيق






التوقيع

الحمدلله رب العالمين
رد مع اقتباس