سؤال

وأنا أحاول أن يغير مائدتي المقاطعة للسيطرة على المقاطعة لوحة المفاتيح. الهدف النهائي بلدي لكتابة بلدي جديد روتين المقاطعة، نسخ نفسي في ذاكرة الوصول العشوائي وجعل نقطة الوضع الحقيقي الجدول المقاطعة بالنسبة لي.

ولقد وجدت 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top