Question

J'essaie de modifier ma table d'interruptions pour prendre en charge l'interruption du clavier. Mon objectif final est d’écrire ma nouvelle routine d’interruption, de me copier dans la RAM et de faire pointer la table d’interruptions en mode réel.

J'ai trouvé un exemple de code en ligne aléatoire, mais en ligne. Il manque des explications sur la façon d'obtenir l'adresse de l'interruption d'origine. Ils ont simplement des variables à leur place et comment se mettre en mémoire.

Ma question est donc la suivante: comment puis-je comprendre ou imprimer sur mon écran la table d’interruption en mode réel?

Et / OU si quelqu'un a de bons exemples de code permettant de désactiver certaines touches ou d'émettre un bip sur certaines touches, je l'apprécierais vraiment.

Merci!

Était-ce utile?

La solution

En mode réel 16 bits, la table d’interruptions commence à l’adresse 0, avec 256 entrées sur 4 octets. Chacun des 256 vecteurs d’interruption reçoit une adresse de 4 octets (segment + offset) dans cette table.

http://en.wikipedia.org/wiki/Interrupt_descriptor_table a quelques détails supplémentaires .

Autres conseils

Si votre programme s'exécute sous DOS, vous pouvez (et devriez probablement) utiliser l'API fournie par 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top