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

كيف استطيع التعامل مع العتاد ؟؟

مغلق
بدأه MAE في 2 مارس 2006 · 1 رد · 804 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف استطيع التعامل مع العتاد بالأسمبلي بدون الاعتماد على اي نظام تشغيل ؟

الرجاء شرح كل المقاطعات و كيفية التعامل معها

وشكرا

مفيش توقيع

#2

اخي العزيز

من المعروف ان لغة الاسمبلي هي اللغة الافضل للتعامل مع العتاد (مثلا الـ 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

تحياتي

post-39453-1141338068_thumb.gif

post-39453-1141338176_thumb.gif

تم تعديل هذه المشاركة بواسطة allko في 3 مارس 2006 في 01:39

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

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