المقاطعات الداخلية (شرح المعالج 8086) - Internal Interrupts

الكاتب بتاريخ عدد التعليقات : 0
المقاطعات الداخلية (شرح المعالج 8086) - Internal Interrupts

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

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

ناخذ اليوم موضوع المقاطعات الداخلية (شرح المعالج 8086) - Internal Interrupts 
يولد المعالج آليًا المقاطعات التالية:
المقاطعة نمط 0: خطأ تقسيم Divide Error تحدث هذه المقاطعة داخليًا عندما يكون ناتج عملية . القسمة أكبر من سعة سجل الوجهة أو عند محاولة القسمة على 0
المقاطعة نمط 1: مقاطعة الخطوة الواحدة Single Step Interrupt يولد المعالج مقاطعة من النمط 1 بعد تنفيذ كل تعليمة، إذا كان TF=0 يستخدم هذا نمط من المقاطعة عادة في تنقيح   debug
البرنامج. يمكننا، مثلا، إظهار أو طباعة سجلات المعالج الداخلية، ضمن إجرائية خدمة هذه المقاطعة.

المقاطعة نمط 3: مقاطعة نقطة التوقف Breakpoint Interrupt يجري عادة إقحام طلب هذه المقاطعة بكتابة التعليمة INT 3 عند نقطة حرجة في البرنامج خلال مرحلة تنقيحه، لإظهار محتوى سجلات المعالج أو الذاكرة أو غير ذلك.
المقاطعة نمط 4: مقاطعة الطفح Overflow تسبب المقاطعة INTO مقاطعة من النمط 4 بعد الانتهاء من تنفيذ التعليمة الحالية إذا كان OF=1
للمقاطعات الداخلية (ما عدا مقاطعة الخطوة الواحدة) أولوية على المقاطعات الخارجية، كما لا يمكننا، باستثناء مقاطعة الخطوة الواحدة، تحجيب هذه المقاطعات.

مثال
تنتج التعليمة DIV في البرنامج التالي مقاطعة من نمط 0 لأنها تقسم محتوى CL على صفر .
MOV AL,92
SUB CL, CL
DIV CL           ; 92/0 undefined

اختبار ذاتي
اكتب إجرائية تطبع على الشاشة Division by zero attempted كلما جرت محاولة القسمة على الصفر .






الجواب:
.MODEL TINY
.CODE
                JMP START
OLD           DD ?                     ; space for old vector
Prompt         DB             'Division by zero attempted$'
Diverr          PROC FAR              ; procedure print Prompt
                    PUSH DX
                    MOV AH, 09h
                    MOV DX, offset prompt
                     INT 21h
                      POP DX
                     IRET
Diverr             ENDP
 ; start installation
START:
             MOV AX,0                                             ; address segment 0000h
             MOV DS, AX
MOV AX, DS:[00h]                                ; get INT 00h offset
MOV WORD PTR CS:OLD,AX              ; save it
MOV AX, DS:[02h]                                 ; get INT 00h
MOV WORD PTR CS:OLD+2,AX           ; save it
MOV DS:[100], OFFSET Diverr              ; save offset
MOV DS:[102], CS                                 ; save segment



التعليمات الخاصة بالمقاطعات
تتضمن محموعة تعليمات المعالج 8088/8086 تعليمات خاصة بالمقاطعات، وهي:
-          :CLI تضع صفرًا في الراية IF , وتستخدم لحجب المقاطعات الخارجية.
-          STI تضع واحدًا في الراية IF , وتستخدم لتأهيل المقاطعات الخارجية .
-          INT nn : تطلب برمجيًا المقاطعة ذات النمط nn .
-          IRET تنهي هذه التعليمة إجرائية المقاطعة. يجب الانتباه هنا إلى أنه يجب استخدام التعليمة IRET وليس RET لإنهاء إجرائية المقاطعة والعودة إلى البرنامج المقاطع، لأن التعليمة IRET تعيد تحميل سجل الراية قبل العودة إلى البرنامج المقاطع بينما لا تفعل ذلك التعليمة RET .
-          :INTO تنفذ هذه التعليمة المقاطعة ذات النمط 4 في حال حدوث طفح نتيجة لتنفيذ تعليمة سابقة أدت إلى وضع 1 في الراية OF يفضل استخدام هذه التعليمة بعد كل عملية حسابية يمكن أن تنتج طفحًا.
-          HLT ينتظر المعالج بعد تنفيذ هذه التعليمة حدوث مقاطعة خارجية أو إعادة تشغيل reset
-          WAIT ينتظر المعالج بعد تنفيذ هذه التعليمة حتى يصبح الدخل على مغرز المعالج TEST' مساويًا 1 .

اختبار ذاتي: لا تتضمن مجموعة تعليمات المعالج 8088/8086 تعليمة تسمح بتغيير حالة الراية TF اكتب تعليمات ُتعكس حالة الراية TF
الجواب:
PUSHF
POP A
XOR AX, 0000000100000000B
PUSH AX
POPF

أولويات المقاطعات
يحتوي المعالج على خمسة أنواع من المقاطعات:
اولا Reset
ثانيا المقاطعات الداخلية
ثالثا المقاطعات البرمجية
رابعا المقاطعة الخارجية غير قابلة للحجب NMI
خامسا المقاطعة الخارجية على المغرز INTR .

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

0 تعليق على موضوع "المقاطعات الداخلية (شرح المعالج 8086) - Internal Interrupts "

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