الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أساسيات Win32 الدرس الأول

بدأه the inventor habib في 23 يوليو 2012 · 7 رد · 1,286 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أساسيات Win32:

ملاحضة هده الدروس خاصة للدين سبق لهم أن استعملو MASM32.

برامج Win32 تشغتل في الوضع المحمي الذي توفر منذ 80286. ولكن 80286 هو الآن في التاريخ. لذلك علينا فقط أن نشغل أنفسنا مع 80386 وما فوقه.

الويندوز يشغل كل برامجه في مساحة داكرة وهمية معزولة خاصة .يعني أن كل برنامج له 4GB من المساحة ولكن ليس كل تطبيقات Win32 لديها 4GB من الداكرة.وانما تلك هي المساحة الأعضمية التي يمكن لأي برنامج الوصول اليها.

الويندوز يفعل كل شيئ لكي يجعل داكرة كل برنامج كافية.

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

كل برنامج معزول في مساحة الداكرة الخاصة به. و هذا غير موجود في الوضع Win16 . يمكن لجميع برامج Win16 رؤية كل منهما الآخر. عكس تطبيقات Win32 .وهدا يقلص من احتمال الكتابة علي بينات (data,code)برنامج أخر.

نمودج الداكرةmemory model كدلك مختلف بشكل جدري من عالم Win16 القديم( رغم أن مازال يستخدم).

تحت تطبيقات Win32 لم نعد نحتاج أن نهتم بنمادج الداكرة memory model أو المقاطع.هناك نمودج واحد من الداكرة Falt memory model .

لم يعد هناك مقاطع بحجم 64kb التي كانت في تطبيقات 16 .الأن الداكرة موسعة لدرجة يمكن أن تصل الي 4GB .وهدا يعني كدلك أننا لم نعد نحتاج الي مسجلات المقاطع .نستطيع أن نستعمل أي مسجل لعنونة أي منطقة في الداكرة.وهدا شيئ جيد أتت به هده التطبيقات للمبرمجين.وهدا ما يجعل برمجة win32 assembly سهلة كلغة السي.

لكي تبرمج تحت Win32 عليك أن تعرف بعض القواعد المهمة.وأحد هده القواعد هي أن دوال الويندوز تستعمل المسجلات esi, edi, ebp and ebx بكترة لدا عليك أن تدفع قيمتهم قبل أن تسدعي أي دالة تم قبل أستدعاء الدالة قم باسترجاع قيمهم لتفادي ضياع محتواهم.

هنا يوجد هيكل برامج Win32:ادا لم تفهم أي شيئ لا تقلق سوف أشرح كل شيئ.



MODEL Flat,STDCALL.

.DATA

<البيانات المهيئة توضع هنا>

......

.DATA?

<البينات الغير المهيئة>

......

.CONST

<البينات التابتة>
......

.CODE

<label>

<الكود يوضع هنا>

.....

end <label>
386.

هدا كل شئ الأن لنفحص الهيكل:

.386

هده من توجيهات المجمع assembler directive.تطلب من المجمع أن يستخدم تعليمات 80386 instruction set .

يمكنك كدلك استعمال .486, .586 ولكن الأول هو الأحسن.في الحقيقة هناك شكلان متطابقان تقربيا لكل نموذج وحدة المعالجة المركزية CPU model.هده النمادج هي .386/.386p, .486/.486p.و P تعني تصف الأصدار .وهي تستعمل فقط عندما يستعل برنامج تعليمات مميزة يعني تعليمات خاصة بالمعالج أو نضام التشغيل في الوضع المحمي.وتستعمل في متل أكواد الدرايفرات والبرامج التي تعمل قرب النواة.وهده لن نستعملها نحن في برامجنا.

.MODEL FLAT, STDCALL

.MODEL هي من توجيهات المجمع assembler directive التي تصف نمودج الداكرة الدي ستعمل عليه في برنامجك.وكما قلنا سابقا هناك نوع واحد في تطبيقات Win32 وهو Flat.

STDCALL تخبر MASM كيف يتم دفع البرامترات أو الوسائط الي الدوال يعني من اليمن الي اليسار او العكس.

في تطبيقات Win16 نوعان C و PASCAL

C:في هدا النوع يتم دفع البرامترات من اليمين الي اليسار.كمتال أدا لديان هده الدالة المعرفة هكدا :

foo(int first_param, int second_param, int third_param)

في النوع C يتم دفع البرامترا هكدا:

(البرامتر التالت)push

(البرامتر التاني)push

(البرامتر الأول)push

(الدالة فوو)call

والنوع PASCAL عكس نوع السي.

.DATA

.DATA?

.CONST

.CODE

كل هده الأربعة عبارة عن توجيهات للمجمع وهي ما يسمي الأجزاء أو لا أعرف بالعربية section +

win32 لا يستخدم المقاطع segments لكن يمكنك تقسيم كل مساحتك الي عدة أجزاء.

هناك نوعان من الأجزاء CODE و DATA.

DATA ينقسم الي تلا مجموعات:

.DATA حيت يوضع بها البينات المهيئة يعني التي تعرف قيمتها وتضعها

.DATA? وهنا يتم وضع المتغيرات الغير المهيئة

.CONST هنا يتم وضع البينات التابيتة التوابت.

ليس من الضروري أن تكون لديك جميع هده المجموعات في برنامجك يمكنك استعمال فقط ما تحتاجه.

هنا جزء واحد لل CODE وهوا مكان وضع الأكواد.

<label>

end <label>

وهما يبينات نقطة الدخول البرنامج.

الي اللقاء نلتقي ان شاء الله في الدرس المقبل حيت سيتم برمجة برنامجك الأول تحت نضام win32

1
#2

السلام عليكم أتمني أن تستفيدو من الدرس

يمكنكم نحميل الدرس علي شكل كتاب من هنا:

http://www.4shared.c...6/__online.html

تم تعديل هذه المشاركة بواسطة the inventor habib في 23 يوليو 2012 في 02:58

#3

للتنويه، فالمقال مترجم عن الدرس الأول لـ Iczelion:

http://win32assembly.online.fr/tut1.html

لمن يرغب بالعودة للمصدر باللغة الانكليزية.

للأخ صاحب الموضوع:

الرجاء اختيار نوع موضوع مناسب في المرة القادمة

فنوع الموضوع حالياً هو "سؤال" والأفضل لو كان "مقالة قصيرة"

سننتظر إلى حين انتهاء فترة السؤال وسأحاول تغيير نوع الموضوع بعدها.

تحياتي

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#4

السلام عليكم

نعم أخي عندما دهبت الي دروس الأخ مشرف المنتدي وجدت أنه ترجم مقالات Iczelion

لدلة سوف أتوقف عن الترجمة ,اضع مواضيع أخري

وبالنسبة لنوع الموضوع فقد راسلت مشرف المنتدي ليغير نوفعه المشكل من المتصفح عندي كما قلت لك من قبل عن مشكل النقاط المكتسبة

ما بداخل قائمة نوع الموضوع لا تضهر تم بدأت بالتخمين ولكن لم أنجح wink.gif

#5
the inventor habib كتب:

نعم أخي عندما دهبت الي دروس الأخ مشرف المنتدي وجدت أنه ترجم مقالات Iczelion

الدروس الأولى كانت مترجمة من مقالات Iczelion لأني لم أكن أعلم أساسيات البرمجة في بيئة Windows و التعامل مع دوال الـAPI أما باقي الدروس فقد اعتمدت بشكل كبير على كتاب "Win32 API Help" مع الرجوع إلى مقالات Iczelion عند الحاجة. أمثلة الدروس هي متشابهة لكن إن قمت بمقارنة الكود المصدري فستجدها مختلفة تماما.

اقتباس
وبالنسبة لنوع الموضوع فقد راسلت مشرف المنتدي ليغير نوفعه

مثل ما قال الأستاذ Xacker و هو أدرى بهذا الموضوع

بالتوفيق

تم تعديل هذه المشاركة بواسطة Z3r0n3 في 23 يوليو 2012 في 12:15

#6

بارك الله فيك

#7

ما رضي يضيف +1 مادري ليش ؟؟

على العموم شكرا الك :happy:

556891961.gif

I am learning from you

it is the programmer eye

#8

لا شكرا علي الواجب أخي

المشاكـس5550

مواضيع مشابهة