تغيير المقاطعة في الوضع العادي 16 بت
سؤال
وأنا أحاول أن يغير مائدتي المقاطعة للسيطرة على المقاطعة لوحة المفاتيح. الهدف النهائي بلدي لكتابة بلدي جديد روتين المقاطعة، نسخ نفسي في ذاكرة الوصول العشوائي وجعل نقطة الوضع الحقيقي الجدول المقاطعة بالنسبة لي.
ولقد وجدت href="http://www.delorie.com/djgpp/doc/dpmi/ch4.6.html" rel="nofollow نموذج التعليمات البرمجية noreferrer"> على الانترنت ولكن مفقود توضيحات حول كيفية الحصول على عنوان المقاطعة الأصلية. لديهم ببساطة المتغيرات في مكانها، وكيفية وضع نفسه في الذاكرة.ولذا سؤالي هو كيف يمكنني معرفة أو الطباعة إلى شاشتي وضع جدول المقاطعة الحقيقي؟
و/ أو إذا كان لدى أي شخص أمثلة التعليمات البرمجية جيدة للقيام بذلك إما تعطيل مفاتيح معينة أو تنبيه على بعض مفاتيح فما استقاموا لكم فاستقيموا نقدر ذلك حقا.
وشكرا!
المحلول
في الوضع الحقيقي 16 بت، ويبدأ الجدول المقاطعة في عنوان 0، مع إدخالات 256 4 بايت. كل واحد من 256 يقاطع ناقلات يحصل على عنوان 4 بايت (قطاع + الإزاحة) في هذا الجدول.
http://en.wikipedia.org/wiki/Interrupt_descriptor_table لديه بعض مزيد من التفاصيل .
نصائح أخرى
وإذا كان البرنامج يعمل تحت DOS، يمكنك (وربما يجب) استخدام API المقدمة DOS:
MOV AH,35H ; function 35H is Get Vector
MOV Al,9 ; slot in IDT for keyboard interrupt
INT 21H ; call DOS, contents of old vector in ES:BX (save them somewhere)
.
.
MOV AH,25H ; function 25H is Set Vector
MOV AL,9
PUSH CS ; the new vector is passed in DS:DX, so copy CS to DS
POP DS : (assuming your new handler is in the same seg as other code)
MOV DX,NewHandler
INT 21H