مقاطعات (Interrupt) المعالج 8088/8086

الكاتب بتاريخ عدد التعليقات : 0
مقاطعات (Interrupt) المعالج 8088/8086

اخذنا في التدوينة السابقة 

تواجه المبدلات مع المعالج 8088/8086


واليوم نأخذ مقاطعات (Interrupt) المعالج 8088/8086
الغاية من المقاطعات
بينا سابقًا مثالا على ربط لوحة المفاتيح مع المعالج 8088/8086 باستخدام الرقاقة 82C55 يتقصى البرنامج، في ذلك المثال، حالة البت IBF للدارة 8255 من أجل معرفة فيما إذا ضغط المستخدم على أحد المفاتيح. بفرض أن المستخدم يضغط على أحد المفاتيح مرة كل ثانية، فسوف ينتظر البرنامج ثانية كاملة حتى يضغط المستخدم على مفتاح آخر. وهذا بالطبع مضيعة كبيرة للوقت لأنه في هذه الحالة لا يمكن للمعالج تنفيذ عمليات أخرى بانتظار أن ينهي المستخدم إدخال كل ما يريد. يمكن تجاوز هذه المسألة باستخدام المقاطعات.
على عكس طريقة التقصي polling السابقة، تسمح المقاطعات للمعالج، مثلا، بتنفيذ برنامج آخر بينما يفكر المستخدم بالمفتاح الذي سيضغط عليه لاحقًا. عند الضغط على أحد المفاتيح تولد لوحة المفاتيح نبضة تقاطع عمل المعالج الذي ينفذ برنامجًا آخرًا. يقرأ المعالج ضمن برنامج خدمة المقاطعة ترميز ASCII للمفتاح المضغوط ثم يعود ليتابع تنفيذ البرنامج الذي جرى مقاطعته.
وبالنتيجة يمكن طباعة تقرير أو تنفيذ مهام أخرى بينمايدخل المستخدم وثيقة مستقلة، آخذًا وقته في التفكير فيما يريد أن يكتب تاليًا.
يبين الشكل التالي مخططًا زمنيًا يوضح كيف يقرأ المعالج أحد المفاتيح أو يطبع محرفًا بينما ينفذ
برنامجًا رئيسًا، باستخدام إجرائية خاصة بخدمة مقاطعة لوحة المفاتيح وإجرائية خاصة بخدمة مقاطعة الطباعة .
مقاطعات (Interrupt) المعالج 8088/8086


تستخدم المقاطعات في الحواسيب الشخصية على نحو كثيف ليتمكن من تنفيذ عدة مهام على التفرع.
أنواع المقاطعات  interrupt type      
يحتوي المعالج 8088/8086 على 256 مقاطعة مختلفة لكل منها إجرائية خدمة مقاطعة Interrupt Service Procedure خاصٌ بها. يمكن مقاطعة عمل المعالج إما:
-         داخليًا، عندما يحدث طفح في عملية حسابية أو عندما يحدث خطأ في عملية تقسيم.
-         برمجيًا، عن طريق تنفيذ أحد التعليمات INTO او INT 3 او INT nn حيث nn نمط المقاطعة وتتراوح قيمته بين 00h و FFh .
-         أو عن طريق الكيان الصلب، وذلك بتوليد نبضة مناسبة على المدخل INTA او NMI كما يمكننا اعتبار المدخل Reset أيضًا مدخل مقاطعة له الأولوية على جميع المقاطعات الأخرى.




إجرائيات خدمة المقاطعات
ينفذ المعالج عندما يستجيب لإحدى المقاطعات ما يلي:
-         يدفع بسجل الراية FR إلى المكدس.
-         يصفر قيمة الراية IF و TF .
-         يدفع بقيمة السجل CS و IP إلى المكدس.
-         يحمِل السجلين CS  و IP بعنوان التعليمة الأولى من إجرائية خدمة المقاطعة الموافقة.

لكل نمط مقاطعة إجرائية خدمة خاصة بها، يجري وضع عنوان أول تعليمة لكل إجرائية ضمن جدول أشعة المقاطعة Interrupt Vector Table .
يتكون جدول أشعة المقاطعة من 256 قيمة كل منها ممثلة على 4 بايت؛ بايتان لتخزين عنوان الانزياح offset address وبايتان لتخزين عنوان المقتطع segment address يحتل الجدول أول 1024 بايت (لماذا؟) ... لأن 10 256 × 4 = ,,, من ذاكرة المعالج 8088/8086 أي يحتل العناوين 000000h-003FFh .
تحتوي المواقع الأربعة الأولى من الجدول 000000h- 000003h عنوان التعليمة الأولى من إجرائية خدمة المقاطعة صفر 00h بينما تحتوي المواقع الأربعة التي تليها 000004 h-000007h عنوان التعليمة الأولى من إجرائية خدمة المقاطعة 01h وهكذا. وبالنتيجة، فإن العنوان الذي يذهب إليه المعالج لشحن عنوان التعليمة الأولى من إجرائية خدمة المقاطعة يساوي نمط المقاطعة ضرب 4 .
إن المقاطعة ذات الشعاع 0 لها أولوية على المقاطعة ذات الشعاع 1 والتي بدورها لها أولوية على
المقاطعة ذات الشعاع 3، أي كلما ازداد رقم شعاع المقاطعة انخفضت أولويتها.

اختبار ذاتي: في أي مواقع يجري تخزين شعاع المقاطعة 12h ؟
الجواب: يبدأ شعاع المقاطعة 12h او 18 بالعنوان الفيزيائي 18 ×4=64) 40h ) أو 64 . وبالتالي يحتوي الموقعان 0040h و 0041 قيمة الانزياح، ويحتوي الموقعان 0042h و 0043h مقتطع البرنامج لإجرائية خدمة المقاطعة .12h
يبين الشكل التالي جدول أشعة مقاطعة المعالج 8088/8086 وكما يبين الشكل، فقد حجزت المقاطعات ال 32 الأولى لعمليات المعالج المختلفة، بينما بقية المقاطعات ال 224 الباقية متاحة لتطبيقات المستثمر.
تخزين شعاع إجرائية مقاطعة في جدول الأشعة
لجعل إجرائية ما ُتنفذ عند طلب إحدى المقاطعات يجب تخزين العنوان المنطقي لبداية الإجرائية هذه الإجرائية في شعاع المقاطعة المخصص لتلك المقاطعة.
يعمل البرنامج التالي على تخزين العنوان المنطقي لبداية الإجرائية NEW40 في شعاع المقاطعة 40h أي في العناوين الفيزيائية أو الحقيقة   100h 103hيخزن البرنامج أولا شعاع المقاطعة القديم في المتحول OLD لِنتمكن من استعادة هذا الشعاع عند انتهاء عمل البرنامج، ثم نخزن انزياح ومقتطع التعليمة الأولى للإجرائية NEW40 في شعاع المقاطعة 40h عند الانتهاء من تخزين شعاع المقاطعة الجديد، يجري تنفيذ الإجرائية NEW40 من أجل كل طلب مقاطعة من النمط 40h مثل .INT 40h
.MODEL TINY
.CODE
JMP START
OLD DD ?                   ; space for old vector
NEW40 PROC           FAR
;
; interrupt software for INT 40h
;
                IRET
NEW40       ENDP
; start installation
START:
MOV AX,0                                          ; address segment 0000h
MOV DS, AX
MOV AX, DS:[100h]                           ; get INT 40h offset
MOV WORD PTR CS:OLD,AX          ; save it
MOV AX, DS:[102h]                           ; get INT 40h
MOV WORD PTR CS:OLD+2,AX      ; save it
MOV DS:[100], OFFSET NEW40       ; save offset
MOV DS:[102], CS                              ; save segment

0 تعليق على موضوع "مقاطعات (Interrupt) المعالج 8088/8086"

لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر
الإبتساماتإخفاء