الفريق العربي للهندسة العكسية
1.1 مرحبًا بك في لغة الAssembly - نسخة قابلة للطباعة

+- الفريق العربي للهندسة العكسية (https://www.at4re.net/f)
+-- قسم : منتديات البرمجة - Programming Forums (https://www.at4re.net/f/forum-5.html)
+--- قسم : البرمجة بالأسمبلي - Assembly Section (https://www.at4re.net/f/forum-16.html)
+--- الموضوع : 1.1 مرحبًا بك في لغة الAssembly (/thread-3918.html)



1.1 مرحبًا بك في لغة الAssembly - R333T - 07-05-2024

[صورة مرفقة: dark.jpg]
 رحلة في عالم الأسمبلي   dance
 
https://www.youtube.com/playlist?list=PL..._swadKSPga

# الفصل 0 : تمهيد # الفصل 1 : المفاهيم الأساسية في لغة الassembly  
[صورة مرفقة: mqdefault.jpg]
 

https://www.youtube.com/watch?v=8qQpS-0H01M


مرحبًا بك في لغة الAssembly، الأسئلة التي قد تسألها.

ما هي الخلفية التي يجب أن أمتلكها؟
قبل أن تأخذ هذه الدورة، يجب أن تكون قد برمجت على الأقل بلغة برمجة عالية المستوى منظمة،.
structured high-level language.
مثل Java, C, Python, أو C++.
يجب أن تعرف كيفية استخدام :
IF statements, arrays, and functions to solve
programming problems.

لحل مشاكل البرمجة.

ما هي الAssemblers والLinkers؟
الAssemblers هو برنامج utility يحول source code البرامج من لغة الassembly إلى لغة الmachine.
والLinkers هو برنامج utility يجمع الملفات الفردية التي تم إنشاؤها بواسطة الassembly في برنامج تنفيذي واحد.
برنامج utility ذو صلة، يُسمى debugger، يتيح لك التنقل خلال برنامج أثناء تشغيله وفحص الregisters والmemory.

ما هي الأجهزة والبرمجيات التي أحتاج إليها؟
تحتاج إلى جهاز كمبيوتر يعمل بنسخة

thirty two bit
أو
sixty four bit
من مايكروسوفت ويندوز، جنبًا إلى جنب مع إحدى الإصدارات الأخيرة من Microsoft Visual
Studio.

ما هي أنواع البرامج التي يمكن إنشاؤها باستخدام MASM؟
الوضع المحمي بنظام 32 بت
thirty two bit Protected Mode.
: تعمل البرامج في وضع الحماية بنظام thirty two bit تحت جميع الإصدارات بنظام thirty two bit و sixty four bit من مايكروسوفت ويندوز.
عادةً ما تكون أسهل في الكتابة وفهمها من البرامج في الوضع الreal-mode. من الآن فصاعدًا، سنُطلق عليها ببساطة sixty four bit mode.
وsixty four bit mode: تعمل البرامج بنظام sixty four bit تحت جميع الإصدارات بنظام sixty four bit من مايكروسوفت ويندوز.

----


ما هو الوضع الحقيقي Real والوضع المحمي Protected
في سياق برمجة لغة التجميع، "الوضع الحقيقي" و "الوضع المحمي" يشيران إلى أوضاع تشغيل مختلفة لعائلة معالجات إنتل x86.

الوضع الحقيقي:
في الوضع الحقيقي، يعمل المعالج بطريقة مشابهة لمعالج (8086) ,eighty-Eighty Six الأصلي، حيث يمكنه الوصول مباشرة إلى ما يصل إلى 1 megabyte من اmemory.
يوفر الوضع الحقيقي طريقة بسيطة ومباشرة للتفاعل مع الأجهزة والذاكرة. ومع ذلك، يفتقر أيضًا إلى حماية الذاكرة وقدرات التعددية المهامية.
البرامج التي تعمل في الوضع الحقيقي لديها الوصول الكامل إلى ذاكرة النظام وموارد الأجهزة، مما قد يجعلها قوية ولكنها أيضًا عرضة للاصطدامات والصراعات في النظام إذا لم يتم إدارتها بشكل صحيح.
الوضع المحمي:
الوضع المحمي هو وضع تشغيل متقدم أكثر متاح على معالجات x eighty-six eighty-two eighty-six (x86 80286 )وما بعدها.
يوفر ميزات مثل memory protection و virtual memory ودعم multitasking.
في الوضع المحمي، يتم تقسيم الذاكرة إلى segments، ويمكن لكل segments أن تمتلك access rights و permissions الخاصة بها، والتي يتحكم فيها نظام التشغيل.
البرامج التي تعمل في الوضع المحمي معزولة عن بعضها البعض وعن النظام التشغيلي، مما يعزز استقرار النظام وأمانه. ومع ذلك، يتطلب كتابة البرامج في الوضع المحمي فهمًا أكثر تعقيدًا لإدارة الذاكرة والتقسيم.
الاختلافات بين الوضع الحقيقي والوضع المحمي:

إدارة الذاكرة: في الوضع الحقيقي، يمكن للبرامج الوصول المباشر إلى أي موقع في الفضاء الaddress ب 1 megabyte . في الوضع المحمي، يتم إدارة الذاكرة في segments، ويتم التحكم في الوصول إلى الذاكرة من قبل نظام التشغيل.
الأمان والاستقرار: يوفر الوضع المحمي حماية الذاكرة والعزلة، مما يمنع البرامج من التداخل مع بعضها البعض أو مع النظام التشغيلي. يفتقر الوضع الحقيقي إلى هذه الحمايات، مما يجعله أكثر عرضة للاصطدامات والثغرات الأمنية.
دعم نظام التشغيل: يُطلب الوضع المحمي لأنظمة التشغيل الحديثة مثل Linux أو Windows لتوفير ميزات مثل التعددية المهامية وحماية الذاكرة. يستخدم الوضع الحقيقي بشكل رئيسي للتوافق الخلفي backward compatibility أو في التطبيقات المتخصصة حيث يكون الوصول المباشر إلى الأجهزة ضروريًا.




----


كيف يرتبط لغة الassembly بلغة الmachine ؟

لغة الmachine هي لغة رقمية مفهومة بشكل خاص من قبل processor الكمبيوتر (CPU). يفهم جميع processorات x eighty six لغة machine مشتركة. تتكون لغة الassembly من بيانات مكتوبة بمسميات مختصرة (mnemonics) مثل ADD، MOV، SUB، و CALL.
لغة الassembly لها علاقة واحد إلى واحد مع لغة الmachine: كل تعليمة في لغة الassembly تتوافق مع تعليمة واحدة في لغة الmachine.


كيف ترتبط C++ و Java بلغة الassembly ؟
اللغات عالية المستوى مثل Python و C++ و Java لها علاقة واحد إلى العديد مع لغة الassembly ولغة الmachine.
هذه العلاقة تعني أن statement واحدًا في C++، على سبيل المثال، يتوسع إلى عدة تعليمات في لغة الassembly أو لغة الmachine. معظم الناس لا يمكنهم قراءة code الmachine الخام، لذلك في هذه الدورة، ندرس أقرب نسبة لها، وهي لغة الassembly.



---

مثلاً، يُنفذ الsource الcode التالية بلغة C plus plus عمليتين حسابيتين ويتم تعيين النتيجة إلى variable.
نفترض أن X و Y عددين integers:
int Y;
int X = (Y + 4) * 3;


int Y

int X equal (Y plus 4) multiply by 3;

وفيما يلي الترجمة المعادلة للغة الassembly.
تتطلب الترجمة عدة instructions لأن كل instruction ب لغة الassembly تتوافق مع instruction واحدة من instructions machine :


mov eax, Y ; نقل قيمة Y إلى التسجيل EAX
add eax, 4 ; إضافة 4 إلى القيمة في التسجيل EAX
mov ebx, 3 ; نقل القيمة 3 إلى التسجيل EBX
imul ebx ; يُضرب قيمة التسجيل EAX (نتيجة الجمع السابق) بقيمة التسجيل EBX. النتيجة يتم تخزينها في التسجيل EAX.
mov X, eax ; ينقل القيمة في التسجيل EAX (نتيجة الضرب) إلى المتغير X.


الregisters هي مواقع تخزين مسماة في CPU تحتوي على نتائج متوسطة للعمليات.
الهدف من هذا المثال ليس الادعاء بأن لغة C plus plus أفضل من لغة الassembly أو العكس، ولكن لإظهار علاقتهما.


----

هل اللغة الassembly قابلة للنقل؟
تُعتبر اللغة التي يمكن compile برامجها وتشغيلها على مجموعة واسعة من أنظمة الحاسوب قابلة للنقل. على سبيل المثال، سيتم compile وتشغيل برنامج C plus plus على أي حاسوب تقريبًا، ما لم يشير بشكل محدد إلى وظائف المكتبة الموجودة تحت نظام تشغيل واحد. ميزة رئيسية للغة Java هي أن البرامج المجمعة تعمل على أي نظام كمبيوتر تقريبًا.
اللغة الassembly ليست قابلة للنقل، لأنها مصممة لعائلة processor محددة. هناك عدد من لغات الassembly المختلفة المستخدمة على نطاق واسع اليوم، كل منها مبني على عائلة processor معينة.
بعض العائلات الprocessor المعروفة هي Motorola 68x00، x eighty six ، SUN Sparc، Vax، و IBM minus 370.
قد تتطابق ال instructions في لغة الassembly مباشرة مع computer’s architecture أو قد يتم ترجمتها أثناء التنفيذ بواسطة برنامج داخل الprocessor يعرف بمترجم الكود المصغر microcode interpreter.

---


لماذا تعلم لغة الassembly ؟

إذا كنت لا تزال غير مقتنع بأنك يجب أن تتعلم لغة الassembly، فإليك بعض النقاط التالية:

إذا كنت تدرس هندسة الحاسوب، فمن المحتمل أن يُطلب منك كتابة برامج embedded، وهي برامج قصيرة مخزنة في كمية صغيرة من الmemory في أجهزة ذات أغراض محددة مثل الهواتف، وأنظمة الوقود والإشعال للسيارات، وأنظمة التحكم في تكييف الهواء، وأنظمة الأمان، وأجهزة اقتناء البيانات، وبطاقات الفيديو cards، وبطاقات الصوت cards، وأقراص الصلبة، ومودمات، وطابعات.
لغة الassembly هي أداة مثالية لكتابة البرامج ال embedded بسبب استخدامها الاقتصادي للذاكرة.

التطبيقات الReal-time التي تتعامل مع المحاكاة ومراقبة الأجهزة تتطلب توقيتًا دقيقًا واستجابات سريعة. اللغات المستوى العالي لا تمنح المبرمجين السيطرة الدقيقة على الشيفرة الآلية التي يتم إنشاؤها بواسطة المترجمات. تسمح لغة التجميع لك بتحديد برمجة تنفيذية بدقة.

تتطلب أجهزة ألعاب الكمبيوتر أن يكون برمجياتها مُحسَّنة لحجم الشيفرة الصغير والتنفيذ السريع. يعتبر مبرمجو الألعاب خبراء في كتابة الشيفرة التي تستفيد بشكل كامل من ميزات الأجهزة في النظام المستهدف. غالبًا ما يستخدمون لغة الassembly كأداة اختيار لهم لأنها تسمح بالوصول المباشر إلى الأجهزة الكمبيوترية، ويمكن تحسين الشيفرة يدويًا لتحقيق السرعة.

تساعد لغة الassembly في فهم العلاقة الشاملة بين الأجهزة الكمبيوتر، وأنظمة التشغيل، وبرامج التطبيقات. باستخدام لغة الassembly، يمكنك تطبيق واختبار المعلومات النظرية التي تحصل عليها في دروس الهندسة المعمارية للكمبيوتر وأنظمة التشغيل.

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



---

هل هناك قواعد في لغة التجميع؟
معظم القواعد في لغة التجميع تعتمد على القيود الفيزيائية للمعالج المستهدف ولغته الآلية. على سبيل المثال، يتطلب المعالج المركزي اثنين من مشغلات التعليمات أن تكونا نفس الحجم. تحتوي لغة التجميع على أقل عدد من القواعد مقارنة بـ C++ أو Java لأن الأخيرتين تستخدمان قواعد البناء النحوي لتقليل الأخطاء المنطقية غير المقصودة على حساب الوصول إلى البيانات على المستوى المنخفض. يمكن لمبرمجي لغة التجميع تجاوز القيود التي تتميز بها لغات البرمجة على مستوى عال. على سبيل المثال، لا يسمح Java بالوصول إلى عناوين الذاكرة المحددة. يمكن للمرء التغلب على هذا القيد عن طريق استدعاء وظيفة C باستخدام فئات JNI (Java Native Interface)، لكن البرنامج الناتج قد يكون صعب الصيانة. من ناحية أخرى، يمكن للغة التجميع الوصول إلى أي عنوان ذاكرة. الثمن الذي يدفعه المبرمجون مقابل هذه الحرية مرتفع: يقضون الكثير من الوقت في تصحيح الأخطاء.
 
nice