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

هل من مهتم بالأسمبلر 32 بايت

مغلق
بدأه chik في 19 أبريل 2004 · 49 رد · 6,300 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#26

الأخوة المشرفين الأخوة الأعضاء

السلام عليكم ورحمة الله وبركاته ،،،

يشرفني أن أكون واحدا من المتابعين للدروس الموجوده على هذا المنتدى الطيب ... رغم أنني قرأت ولم أفهم شيئا ... ولكن أعلم أن صعود السلم درجه درجه .

سأعيد قرائة ما قرأت وخلال يومين إن شاء الله يعني تقريبا يوم السبت أضع أول أسألتي وإستفساراتي لكم وشكرا لهذا المجهود الجبار من قبل أبناء هذه الأمه .

وفقكم الله . وكثر من أمثالكم

#27

السلام عليكم,

أهلا بالأخ سعد : نحن ننتظر أي تساؤلات من عندك ومن عند جميع الأعضاء ونتكنى أن نكون عند حسن ضن الجميع.

نطلب الله أن يوفقنا ويزيدنا علما وإلى اللقاء.

#28

السلام عليكم,

هنا ستأخد المثال الأول ونزيد عنه بعض الأشياء.

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

لبرمجة هذا يمكن أن نتخذ عدة طرق. الطريقة السهلة هي استعمال المكتبات الموجودة مثل StrLen الموجودة في Masm32 والتي تعطينا طول جملة ما وكدلك يمكن استعمال Ucase لتحول الجملة إلى الأحرف الكبيرة . وهده الطريقة سهلة جدا واتركها كتمرين لمن أراد أن يجرب .

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

لحساب طول الجملة سنستعمل الطريقة البدائية وهي محاولة العثور على البايت 0 الذي يعني آخر الجملة وسنقرأ الجملة بايتا بايتا وإذا لاحظتم داخل المكتبة StrLen فهي تحتوي على ألغوريثم مطور لهذا الغرض حيث يقرأ الجملة 4 بايتات مرة واحدة وطبعا هذه الطريقة ستكون أسرع خاصة في الجما الطويلة. لكن نحن سنبدأ بالسهولة

mov edi,offset buff ;Put in edi the address of the string we want to count

        
mov     edi,offset buff    ;1
push    edi   ;2
    xor     eax,eax ;3
    repnz   scasb   ;4
    pop     ebx     ;5
    lea     eax,[edi - 3] ;6
    sub     eax,ebx  ;7
    invoke wsprintf,addr buffOut,addr FormMess,eax;8

1- نضع في الرجستر Edi عنوان الجملة التي نريد حسب طولها.

2- نحفظ قيمة هذا الرجستر في الستاك لأننا سنحتاجها لاحقا

3- هنا نضع في EAX قيمة 0 فهذا سيضع لنا أوتوماتيكيا 0 في AL لأننا سنبحث عن 0

4- الأمر scasb يبحث في العنوان edi عن القيمة الموجودة في al و b في scasb تشير إلى أننا سنبحث عن بايت ويمكن استعمال scasw scasd في الحالات الأخرى.وهذا التعليمة حين تبحث في edi فإنها تزيد أو تنقص أوتوماتيكيا قيمة edi حسب Direction Flag ولكن في الحالات التي لم نغير فيها شيء يكون دائما بالتزايد كما في حالنا هذا.ولقد زدنا لهذا الأمر repnz وهذا سيعني أننا سنقوم بالبحث في حالة إذا لم نعثر على القيمة المطلوبة. وحين نعثر على هذه الأخيرة فبمجرد نقص قيمة edi الحالية بالقيمة التي احتفظنا بها مسبقا يكون لدينا طول الجملة.

5- نضع في ebx القيمة التي احتفظنا بها.

6- نضع في eax قسمة edi الحالية ناقص 3 وذلك لأنه حين نكتب جملتنا وننقر على Enter فإننا نزيد إلى الجملة القيمتان 10 و 13 زيادة إلى 0 الذي يعني نهاية الجملة وإذا كنا لا نريد أخذ كل هذا داخل الجملة لهذا ننقص 3

7- ننقص القيمة الحلية بالقديمة ويكون عندنا ما كنا نريده.

8- الدالة wsprintf الموجودة في user32 ولهذا تلاحظون أنه قد زدنا إشارتها في Include هي تكتب ما يسمى ب Formatted Strings ويمكن أن نرجع لها بالتفصيل لاحقا ولكن الذين يعرفون مثلا البرمجة ب س أو س++ فهم يعرفونها جيدا.

هذا فيما يخص حساب طول الجملة

فيما يخص تحويل الجملة إلى UpperCase فيمكن أن نتبع الطريقة التالية :

نقرأ الجملة حرفا حرفا ونقارن كل حرف بقيمة a و z فإذا كان الحرف الذي نقرأه بين هذين القيمتين فهو إذن حرف صغير ولكي نحوله إلى أكبر فقط سننقص من قيمته القيمة 32 وهذا كل ما في الأمر.

في هذا المثال لقد استعملنا أوامر الأسمبلر العادية مثل cmp jz وغيرها وسنرى من بعد أنه يمكن أن نستغني عنها إذا ما استعملنا تعليمات Masm32 مثل if . وغيرها.

وفي الملف المرفق تجدون البرنامج كاملا.

أتمنى أن تكون هناك مناقشات وآراء وإلى اللقاء.

Upper.zip

#29

إخواني قبل كل شئ

أنا لا أعرف كيف أطبق ما ذكرتم ...

ثانيا : لقد قرأت في مقال للأخ cHik على منتدى الدروب هذه الجمله ( الأدوات الضرورية Masm32 و VC++6 ) ... وأنا لا أملك هذه الأدوات ولا أعرف عنوان لتنزيلها عن طريق الأنترنت رغم أني بحثت في القوقل ولكن لم أستطع تحميل هذه البرامج . لذا أرجوا من أحد الأعضاء أن يقوم بوضع رابط لتحميل هذه البرامج إذا كانت ضرورية .

ولكن قرات أيضا في مقال آخر في هذا الموضوع أن برنامج النوت باد يكفي فكيف يكون ذلك !!! رغم أني كتبت بعض الأوامر ولم تعمل معي .

عذرا الأسئله تافههه ولكن هذا هو واقع ما أنا عليه . جاهل بالبرمجه مع مرتبة الشرف . حتى لو تطلبون معرفه بسيطه بلغة السي ++ فلن تجدوا ما يسركم ، فإن كان هذا محبطا ويحتاج إلى تعلم هذه اللغات مسبقا فهذا يعني أن أذهب إلى منتدى آخر لأتعلم هذه اللغه ثم أعود .

وشكرا لكم مره أخرى ...

#30

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

السلام عليكم ورحمة الله وبركاته ،،،

#31

سؤال آخر .

دائما تستخدمون المعالجات القديمه مثل 386 و486 حتى أن الأخ / عفيف يريد الشرح على معالجات 8086 وقد قال ( الدرس القادم باسم المعالج 8086 ) مع العلم أن جهازي من نوع 1700 ميجاهيرتز . فهل ويحمل نظام ويندوز أكسبي بروفيشونال ودمتم سالمين ، إذا فما الحل .

#32

السلام عليكم,

**********************************************************

الأخ سعد : لتتبع هذه الدروس يعني الأسمبلر 32 بايت يلزمك Masm32 .فهو بالطبع يمكنك استعمال نوتباد لكتابة الكود ولكن هذا سيتوقف هنا إذ يلزمك شيئا آخر لبناء برنامجك أي تحويل الكود الذي كتبته إلى برنامج جاهز للتشغيل.

انظر الرابط التالي لتتمكن من تحميل Masm32 :

http://www.masm32.com/

أتمنى أن يشتغل عندك الرابط المذكور وإذا كان فيه أي تساؤل آخر نتمنى أن نكون تحت الخدمة.

إلى اللقاء.

#33

السلام عليكم,

الأخ سعد : نسيت الجواب على باقي تساؤلاتك .

فيما يخص VC++ فقد قلت أنه يلزمنا في المقال الذي ذكرت لأنه هناك كنت أعمل مقارنة بين البرمجة بالأسمبلر 32 بايت وبين البرمجة ب س++ .وهنا لا نستعمله إلا ربما إذا كنا نريد صنع Resources في برامجنا المستقبلية مع العلم أم هناك برامج أخرى عديدة تصلح لهذا الغرض. وهذا البرنامج يحبذ أن يكون عندنا لتعلم البرمجة ب س++ .وليس لدي رابط له فمن الأحسن شراء البرنامج كاملا أي Visual Studio وهو يحتوي على عدة أقراص ويمكن شراؤها في الأسواق المعروفة الموجودة في عدة دول عربية أو الحصول على نسخة من صديق.

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

أتمنى أني كنت شملت جميع تساؤلاتك وإلى اللقاء إن شاء الله.

#34

السلام عليكم

اين المشاركات ؟ اين التفاعل و الاسئله ؟ لابد من بذل مجهود من قبل المشاركين لحل المسئله لانها الطرتقه الوحيده لتعلم اللغه.

همتكم ياشباب حتى لا يمل الاخ chik .

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#35

والله معك حق أخي أحمد

بس الأخ / chik

يشرح برمجة الأسمبلي .

وأنا واحد من الأعضاء لسه أتعلم التفريق بين الأعداد الثنائية والعشريه والسته عشريه . مع الأستاذ عفيف . والله بودي أن أتابع هذه الدروس ، لولا أن أخاف أن أفقد التركيز مع كثرة الدروس .

وشكرا وبيض الله وجوهكم وكثر الله من هذه الأقلام .

وأرجوا أن تقبلوا عذري .

هذا أنا واحد من الأعضاء يرغب بالتعلم ولكن الحقيقه أستنزف هذا جهد مني هو قليل لكن يحتاج إلى بذل جهد .

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

#36

والله ما ودي أخسر الأستاذ chik

بس ما أقدر أتابع لدرسين وأستاذين في وقت واحد .

#37

الأخ سعد

ركز في موضوع واحد ولا تشتت بالك في موضوع قد لا يكون مستعجلا بالنسبة لك.

واصل في دروس الأخ عفيف، وعند الانتهاء منها بإذن الله ستجد دروس الأخ chik موجودة بالحفظ والصون، خصوصا وأنه يتحدث عن برمجة الأسمبلي 32 بت، والخوض في هذا الأمر يتطلب فهم برمجة الأسمبلي 16 بت.

فكر بطريقة أخرى

#38

السلام عليكم

أشكرك الاخ chick وكل من ساهم في إثراء هذه الدروس وسأحاول إن شاء الله تتبع الدروس وإن كان هناك أي غموض سأقوم بطرحه وجزاكم الله خيرا

#39

السلام عليكم,

حسب رأيي أضن أن هذه أحسن فرصة لتعلم الأسمبلي سواء 16 أو 32 بايت لأنه الآن لدينا على الأقل 3 أعضاء نشطين وملمين بهذه اللغة من بينهم الأخ أحمد والأخ عفيف.

فلذا أنصح كل من يهتم بهذه اللغة أن ينتهز هذه الفرصة وحتى يتحمس الإخوان ويتشجعوا لإتمام الدروس.

أتمنى التوفيق للجميع ومزيد من التعلم إن شاء الله.

إلى اللقاء.

#40

السلام عليكم

انا معكم ان شاء الله وشكرا لكم

#41

السلام عليكم,

أولا أريد أن أرحب بالأخ hishammhk وأتمنى أن يجد راحته جانبنا وكما أتمنى أن يستفيد ويفيد هدا المنتدى.

كما أريد أن أشكره على اهتمامه بهدا الموضوع إلا أني قد توقفت عن هده الدروس لعدم وجود مهتمين بهدا النوع ولكن إدا ظهر من يهمه فسأعود إن شاء الله مرة ثانية لتتبع هدا وأتمنى الله أن يعطينا العلم والقدرة لهدا.

إلى اللقاء.

#42

بسم الله الرحمن الرحيم

شكرا للأخ chick على جهده وجزاك الله خيرا

واريد أن تعتبرني تلميذا لك خاصة في لغة الأسمبلي فهي أحب لغة برمجه بالنسبه لي.

حتى الأن تعلمت الأسمبلي خاصة لبرمجة ال MicroControler من نوع PIC

,ATMEL 8051 والآخر يشبه في برمجته Intel 80x86 مع بعض الاختلافات والحمد لله اجيد

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

المهم تعلمت برمجة الأسمبلي في بيئة 16bit وكتبت بعض الأكواد ولكن ليست كثيره

وكما تعلم فالبرمجه في 16 bit تعتمد علي ال interrupts فهل يمكن استخدامها في 32 bit ؟

كما أن البرنامج المسمى first والمكتوب لل consol لا يعمل في ال Dos فهل السبب أن ال Dos

16 bit فقط ؟ وهل يمكن كتابة برنامج يعمل في ال Dos من خلال Masm32 ؟

يكفي هذا القدر من علامات الاستفهام وللأسئله بقيه

#43

السلام عليكم,

نرحب بالأخ Asm4all وأتمنى أن يفيدنا بمعلوماته.

فيما يخص برامج 32 بايت هي لا تشتغل في نضام الدوس وذلك أن البروسسور يشتغل هنا في النضام الحقيقي بينما في 32 بايت يشتغل في النظام المحروس زيادة على شغل أم تشغيل الذاكرة يختلف في هذين النضامين.

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

هذه جماة من المفارقات وإذا أردت يمكن أن نتناقش فيها .

إلى اللقاء.

#44

ألسلام عليكم ورحمة الله وبركاته..

أشكرك يا أخ chick و استكمالا لبعض الاستفسارات التي أود أن أطرحها عن لغة الأسمبلي :

1) من أين يمكن الحصول على Win32 API manual كامله لكل المكتبات

2) أود أن أعرف هل تكتفي لغة الأسمبلي 32 بالدوال والأدوات الموجوده في Windows API أم أنه من الممكن برمجة أداه حسب الطلب

( على سبيل المثال لا الحصر زر بشكل جديد وليكن مستدير مثلا أو شكل أخر للنافذه) وهذا ما أتمنى أن يكون.

3) أين يمكن أن أحصل على Windows Debuger لمتابعة أخطاء البرنامج وأرجو أن يكون أسهل من SoftIce

كما أتمنى أن يعمل مع الكود نفسه أي يعمل كمحاكي مثل ال Debug في VC++ مثلا, لأن هذا سيريح أعصابي من

متابعة الكود كله فضلا عن مزايا أخرى .

4) و فيما بعد هل سيمكننا أن نبرمج برنامج يعمل في (DOS or Consol ) ثم ينتقل الى Windows مثل برنامج ال

Setup fro Windows مثلا.

معزرة إذا كانت أسئلتي ممله أو ليس أو كثيره فلينبهني أحدكم فقد تعودت أن أسئل من يفوقني في الخبره

وأدع الله أن يفيدنا وإياكم وجزاكم الله خيرا

أخوك أحمد من مصر

#45

السلام عليكم

إجابات سريعه:

اقتباس
1) من أين يمكن الحصول على Win32 API manual كامله لكل المكتبات

1. من APIVIEWER

اقتباس
2) أود أن أعرف هل تكتفي لغة الأسمبلي 32 بالدوال والأدوات الموجوده في Windows API أم أنه من الممكن برمجة أداه حسب الطلب

( على سبيل المثال لا الحصر زر بشكل جديد وليكن مستدير مثلا أو شكل أخر للنافذه) وهذا ما أتمنى أن يكون.

2. بالتاكيد يمكنك برمجة اى شئ بالاسمبلى. راجع Test Department لمشاهدة بعض الإمكانيات المتاحه.

اقتباس
3) أين يمكن أن أحصل على Windows Debuger لمتابعة أخطاء البرنامج وأرجو أن يكون أسهل من SoftIce

كما أتمنى أن يعمل مع الكود نفسه أي يعمل كمحاكي مثل ال Debug في VC++ مثلا, لأن هذا سيريح أعصابي من

متابعة الكود كله فضلا عن مزايا أخرى .

3. Olle Debug هى افضل و اسهل Debuger , وهى مجانيه ايضاً.

اقتباس
4) و فيما بعد هل سيمكننا أن نبرمج برنامج يعمل في (DOS or Consol ) ثم ينتقل الى Windows مثل برنامج ال

Setup fro Windows مثلا.

4. نعم ممكن و العكس ايضاً ممكن , بمعنى عمل بروجرام فى windows يفتح نافذة console.

اقتباس
معزرة إذا كانت أسئلتي ممله أو ليس أو كثيره فلينبهني أحدكم فقد تعودت أن أسئل من يفوقني في الخبره

وأدع الله أن يفيدنا وإياكم وجزاكم الله خيرا

بالعكس الاسئله كانت هادفه و قيمه, وفقنا الله و إياك.

و السلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#46

السلام عليكم,

نشكر الأخ أحمد على ردوده المتميزة والهادفة.

فيما يخص السؤال الأول أنا شخصيا أعتمد على MSDN فيما يخص API وأعتبرها جيدة كدليل. رغم أنها موجهة للبرمجة ب س++ لكن تغييرها للأسمبلر ليس بالمهمة الصعبة . كما أن هناك مواقع تقترح بعض الملفات لهذا ولكني لم أهتم بها ولم تبق على بالي الآن.

إلى اللقاء.

#47

السلام عليكم ورحمة الله وبركاته..

أشكر الأخ أحمد غريب ( خبير الأسمبلي ) جدا وجزاك الله خيرا

وأشر الأخ chick على االرد وجاك الله خيرا

أود أن أحصل على كتب في الويندوز أسمبلي سواء كانت

PDF أو TXT أو أي ملفات أخرى

فبدايتى في الأسمبلي كانت مع

Guide to 80x86 Assembly & Art Of Assembly

وأتمنى لو أحصل على مثيلهم في برمجة الوندوز بالأسمبلي

حاليا بدأت في كتابة أول البرامج للوندوز وتعلمت كيفية بناء النافذه في ملف ال RC

وتعلمت هذا من خلال بعض الأمثله المدرجه مع Masm32

ولاحظت الشبه بين الذي أبنيه بيدي والملف الذي يبنيه VC++

ولكنمع بعض الاضافات التي يمكن تحديدها وإزالتها

أعتقد أنه من الممكن استخدامه بدلا من تعقيد الحساب لأبعاد النافذه والأدوات

ولي سؤال مهم جدا كيف يمكن تحويل نص إلى قيمه عدديه والعكس

أعرف كيف يمكن ذلك في السي ولكن لا أعرف كيف في الأسمبلي

يمكن أن أنشيء دالة لتحويل النص إلى رقم وستكون بطيئه وممله نسبيا

ولكن المشكله الكبيره في التحويل للعكس.

شكرا وجزاكم الله خيرا

#48

السلام عليكم

لتحويل بين النص و العدد هناك ادوات فى masm32 , مثل dwtoa و التى تحول العدد الى نص, atodw تحول النص الى عدد. يوجد العديد من هذا النوع من البرامج مرفقه مع masm32 ستجدها مشرحه فى ملفات الهلب c:\masm32\help

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#49

السلام عليكم,

لإستعمال الرسورس في الأسمبلر يمكن أن تستعمل أي برنامج آخر يقوم بهذا الغرض وأنا شخصيا كل ما يتعلق بالرسورس أصنعها داخل الفجوال س++ .

لنعلم أن في Masm32 هناك مكتبة فيها العديد من الأدوات تمنح لنا بعض التسهيلات كما في تساؤلاتك وما عليك إلا إلقاء نظرة في المجلد masm32\M32LIB وستجد العديد من التسهيلات إما في تحويل الأرقام من وإلى كتابة أو ما يتعلق بالصور وما إلى غير ذلك.

إلى اللقاء.

هذا الموضوع مغلق.

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