سؤال

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

أهلا بكم أعضاء منتدي لغة التجميع (Assembly Language)

أما بعد...

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

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

لكن بعد هذا...قرأت مقالة علي المنتدي يوضح فيها كاتب الموضوع قيمة لغة التجميع (Assembly Language) وذكر مميزات عديدة للغة البرمجة و منها رغبت في تعلم لغة التجميع.

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

  • 0

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

أحيي فيك رغبتك للتعلم .. وأرجو ألا تخمد أبداً :)

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

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

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

مثلاً .. افرض أن المعالج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 وهي لغة الآلة الافتراضية ..

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

 

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

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

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

 

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

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

فإذا كان هذا ما تريده .. فأرشيف القسم ينتظرك .. ودروس الأستاذ Z3r0n3 ممتازة ..

بالتوفيق :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .