أساسيات 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
