منتديات دريم السعودية  

العودة   منتديات دريم السعودية > قسم الكمبيوتر والأجهزة الذكية > منتدى Windows-11 و برامجه الأساسية

 
 
أدوات الموضوع انواع عرض الموضوع
Prev المشاركة السابقة   المشاركة التالية Next
قديم 12-09-2003, 05:50 PM   رقم المشاركة : 1
معلومات العضو
chik
عضو
 






chik غير متواجد حالياً

chik is on a distinguished road
 
chik is on a distinguished road
cryin تعلم برمجة الوندوز بلأسمبلر

السلام عليكم,
سأقترح هنا بعض الملومات للدين يهتمون بلأسمبلر 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 ويمكنكم من الآن البدء في هدا وكما قلت هناك تشابه كبير مع س++
في انتظار آرائكم أقول لكم إلى اللقاء.






الملفات المرفقة
نوع الملف: zip sample1.zip‏ (18.0 كيلوبايت, المشاهدات 204)
رد مع اقتباس
 

مواقع النشر (المفضلة)


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع


الساعة الآن 12:03 PM.


Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
adv helm by : llssll