12-09-2003, 05:50 PM | رقم المشاركة : 1 | ||||
|
تعلم برمجة الوندوز بلأسمبلر
سأقترح هنا بعض الملومات للدين يهتمون بلأسمبلر 32 بايت ولديهم معلومات عن س++ . الأدوات الضرورية Masm32 و VC++6 . سأعطي في هذه البداية مثالا بسيطا يبرز لنا نافذة من نوع MessageBox من س++ والأسمبلر حتى نرى نقط التشابه وكيف نستعمل APIفي هاذين النوعين. في الملف المرفق تجدون المشروعين كاملين. سأبدأ بتحليل س++ : 1 #include <windows.h> هنا نزيد الملف المذكور وهو يحتووي على جميع ما سنحتاجه في عملنا هذا 2LPSTR Caption= في هذين السطرين ندرج معطياتنا وهنا نعني عنوان ومحتووى MessageBox 3 int WINAPI WinMain( هذه تدل أين يبدأ برنامجنا وهي تعادل main هنا لا نحتاج Parametrs وسنرجع إليهم حين نأخذهم بعين الإعتبار ووهنا نقلتها كما هي من MSDN . 4 هنا نبدأ ب MessageBox وإذا أطللنا على MSDN نرى ما يلي int MessageBox( HWND hWnd, // handle of owner window LPCTSTR lpText, // address of text in message box LPCTSTR lpCaption, // address of title of message box UINT uType // style of message box ); نرى أنها تحتاج 4 Parametrs hWwnd وهو هاندل النافذة وووسنعطيها صفر كاعتبار أنه ليس لها نافذة أم lpText و lpCaption هو العنوان والمحتوى والأخير هو نوع النافذة التي نريد انظروا MSDN لتروا مختلف الأنواع 5 هنا نغادر البرنامج ب VOID ExitProcess( UINT uExitCode // exit code for all threads ); أما فيما يخص الأسمبلر في الأول نعطي نوع Processor Instructions هنا نعطي نوع 386 ونعطي أيضا نوع الذاكرة Flat وهنا يمكن أن نأخذ كل هذا كموديل لبرامجنا ويمكن أن نقرأ عنها في ملف المساعدة ل MASM 1 مثل ما سبق ملفات Include نزيد windows.inc الذي يحوي عدة معطيات مثل MB_OK وهنا نزيد أيضا user32.inc و kernel32.inc لأن MessageBox توجد في user32 أما ExitProcess فتوجد في kernel32 كما نزيد ملفات .lib المرافقتان لهما في س++ لم نكتب كل هذا لأن الكل كان مذكور في windows.h . 2 .data هنا تبدأ منطقة المعطيات وسنعطي كالسابق العنوان والمتوى 3 .code هنا تبدأ منطقة الكود ووهي بمثابة main 4 بعد هذا عندنا invoke MessageBox, 0,Offset Text, Offset Caption, MB_OK + MB_ICONEXCLAMATION هنا نرى التشابه الكبير نكتب المكرو invoke وو المسج بوكس يكتب في نفس الشكل مثل س++ ونلاحض نفس الشيء فيما يخص ExitProcess . لكي نلخص إذا كانت عندنا Api باسم Func نكتبها في س++ كما يلي : Func(a,b,c,d,e) ففي الأسمبلر نكتبها Invoke Func,a,b,c,d,e وفي الحقيقة فإن هذه الماكرو تفعل العمل التالي: push e push d push c push b push a call Func نرى أن parameters تضع في الستاك على العكس يعني الأخير يطرح الأول وهنا ارجعو إلى مثالنا وغيروا invoke MessageBox ب : push MB_OK push Offset Caption push Offset Text push 0 call MessageBox وتلاحظون أنه يعطينا نفس النتيجة. وللتجميع يمكنكم استعماا الملف make.bat وسنرجع للحديث عنه في مرة أخرى وإذا غيرنا اسم ملف chik1 يجب التغيير أيضا chik1 داخل هذا الملف. أما int 3 هي الآن غير شغالة وسنرجع إليها حين نستعمل Debugger نكتفي بهذا القدر اليوم وأتمنى أن أكون أعطيتكم الرغبة في هذه البرمجة وفي المرة القادمة يمكن أن نتطرق لبرمجة نافذة من نوع DialogBox ويمكنكم من الآن البدء في هدا وكما قلت هناك تشابه كبير مع س++ في انتظار آرائكم أقول لكم إلى اللقاء. |
||||
15-09-2003, 03:20 PM | رقم المشاركة : 2 | ||||
|
جزاك الله كل خير بنزل الملف ومشكور مقدما وسأكنب لك بعد التنفيذ |
||||
15-09-2003, 03:41 PM | رقم المشاركة : 3 | ||||
|
جميل جدا اخي CHIK والفرق واضح من خلا الحجم حيث ان حجم الملف بالاسمبلي اصغر عشر مرات من السي بلس بلس |
||||
15-09-2003, 03:56 PM | رقم المشاركة : 4 | ||||
|
السلام عليكم, |
||||
16-09-2003, 01:20 PM | رقم المشاركة : 5 | ||||
|
السلام عليكم, |
||||
16-09-2003, 02:24 PM | رقم المشاركة : 6 | ||||
|
رائع جدا اخي chik |
||||
18-09-2003, 03:27 PM | رقم المشاركة : 7 | ||||
|
السلام عليكم, |
||||
30-09-2003, 06:27 PM | رقم المشاركة : 8 | ||||
|
السلام عليكم, |
||||
30-09-2003, 06:33 PM | رقم المشاركة : 9 | ||||
|
السلام عليكم, |
||||
13-10-2003, 09:40 PM | رقم المشاركة : 10 | ||||
|
عمل رائع جدا ومميزما ادري وشلون نشكرك عليه |
||||
15-10-2003, 11:28 PM | رقم المشاركة : 11 | ||||
|
تسلم اخوي chik |
||||
15-11-2003, 08:14 AM | رقم المشاركة : 12 | ||||
|
مشكور ما قصرت |
||||
20-01-2004, 01:59 AM | رقم المشاركة : 13 | ||||
|
تسلم على المشاركه الحلوه0 |
||||
08-02-2004, 05:15 PM | رقم المشاركة : 14 | ||||
|
يعطيك العافية
يعطيك العافية |
||||
20-02-2004, 05:55 PM | رقم المشاركة : 15 | ||||
|
و الله انا ممتن |
||||
مواقع النشر (المفضلة) |
|
|