السلام عليكم
لاحظت ان اكبر مشكلة تواجه المبتدئين هى معرفة الفرق بين الاسمبلى 16 والاسمبلى 32, واكثر خطاء شائع هو ان المبتدء يقوم بتحميل مترجم 32 بت مثل masm32 ويحاول تطبيق برنامج بإستخدام المقاطعات, فى اغلب الاحيان يقوم المترجم بترجمة البرنامج بدون اخطاء ولكن عند التنفيذ تظهر اخطاء غريبة ولا يستطيع المبتدء فهم السبب...
اولاً علينا ان نتعلم كيف نتعرف على البرنامج إن كان من نوع 16 او من نوع 32 بت..
برامج الـ16 بت تحتوى على مقاطعات وهى التى تبداء بالكلمة int, كذلك بعض البرامج تحتوى على الدالة in و الدالة out للتعامل معى منافذ الجهاز بشكل مباشر, هذه التعليمات تسمى Privileged instructions ولا يسمح نظام الوندوز 32 بت بإستخدامها مباشرتاً من خلال برامج الـ32 بت..
إذا اردت كتابة برنامج 16 بت تحت نظام الوندز 32 يجب عليك إستخدام كمبايلر اخر مثل masm وليس masm32, او بالاحرى برنامج masm الاصدار الخامس على اقصى حد..
طبعاً البرنامج يعمل تحت نظام الوندوز 32 بإستخدام emulator ولكن لن تشعر بالفرق لان النظام لا يخبرك بانه يشغل البرنامج من خلال emulator...
برامج الـ32 تستخدم دوال الـAPI بدل من int او in و out, وهذه البرامج تلاحظ انها تستخدم المسجلات الموسعة امثال eax و ebx الخ...
خلاصة الكلام إذا كان برنامجك يحتوى على كلمة مثل int 21 هذا يعنى ان برنامج هو من نوع 16 ولن يعمل إذا استخدمت masm32,,,,
ارجو ان يكون الشرح واضح ...
والسلام عليكم