كيف استطيع التعامل مع العتاد بالأسمبلي بدون الاعتماد على اي نظام تشغيل ؟
الرجاء شرح كل المقاطعات و كيفية التعامل معها
وشكرا
كيف استطيع التعامل مع العتاد بالأسمبلي بدون الاعتماد على اي نظام تشغيل ؟
الرجاء شرح كل المقاطعات و كيفية التعامل معها
وشكرا
مفيش توقيع
اخي العزيز
من المعروف ان لغة الاسمبلي هي اللغة الافضل للتعامل مع العتاد (مثلا الـ Drivers تبرمج بالاسمبلي)...
لكن سؤالك غامض بعض الشيئ...هل لك ان توضح اكثر؟
اما بخصوص
اقتباسبدون الاعتماد على اي نظام تشغيل
فراجع الردود في هذا الموضوع
بخصوص المقاطعات فهذه تستخدم في الـ asm 16 bit (لن تحتاجها في الـ 32 bit ) .
هذا الموضوع واسع جدا لكن ساحاول ذكر جميع التفاصيل...
بتصرف من كتاب assembly step by step
بداية هناك نوعان من الـ interrupts (المقاطعات) :
النوع الأول : software interrupt
يوجد في اول كيلوبايت (عند العنوان 0:0) من الـ memory لاي جهاز 8086/8088 جدول يحوي على 256 مدخل(بضم الميم) يسمى interrupt vector table وكل مدخل(entry) هو عبارة عن عنوان (مكون من جزئين segment:address ).
على سبيل المثال فان ال vector رقم 21 يمثل مقاطعة الـ dos dispatcher .
عند تنفيذ التعليمة int 21h فان الـ CPU يذهب الى interrupt vector table ثم يقرا العنوان المخزن في الـ vector 21 ويقفز الى ذلك العنوان. وحيث ان ذلك العنوان موجود فيه الـ dos dispatcher فان هذه المقاطعة تتولى السيطرة وتنفذ مهتمها.
اي ان لدينا 256 مقاطعة (لكن كل مقاطعة قد تحوي عدة services فرعية كما سنرى) من 0 الى 255 .
دعنا نتحدث عن الامور البرمجية...تفحص هذا الكود:
allko db "allko is the knig of RE","$" ... lea DX,allko; Load offset of allko message string into DX mov AH,09H : Select DOS service 09H: Print String int 21H; Call DOS.
كما ترى ففي البداية تم تعريف string اسمها allko ثم نقلنا عنوانها الى DX (لماذا DX ؟ هكذا هو!!!) وفي الامر التالي يتم نقل القيمة 09h الى AH حيث يتم اختيار الخدمة الفرعية : Print String ثن استدعينا الـ DOS ليقوم بالتنفيذ...
النتيجة...طباعة تلك الـ string على الشاشة.
هذه احدى التطبيقات على المقاطعات وهناك تطبيقات اخرى(بعضها غاية في التعقيد)
النوع الثاني : hardware interrupts
الفرق الاساسي بينه وبين النوع الاول هو في طريقة "تنبيه" المعالج...فالطريقة في النوع الاول كانت برمجية ، تحديدا باستخدام التعليمة INT لكن في النوع الثاني فالطريقة هي بواسطة ارسال نبضات كهربائية electrical signals الى المعالج...
كالـsoftwar interrupt ، فان الـ hardware interrupts لها interrupt vector table وفي كل vector هناك ما يسمى بالـ interrupt service routine (ISR) وهو المقاطعة التي ستنفذ احد الاوامر...
ان كتابة الـ ISR ليس كالـ software interrupt فهذا العمل ليس مخصصا للمبتدئين.
ان كنت تريد مزيدا من الايضاح حول كيفية تنفيذ المقاطعة وعلاقتها بالـ dos فهناك صورتان في المرفقات توضحان ذلك.
ايضا يمكنك الذهاب هنـــــــا
للحصول على قائمة بـ interrupt list
تحياتي
تم تعديل هذه المشاركة بواسطة allko في 3 مارس 2006 في 01:39
هذا الموضوع مغلق.