Pregunta

Estoy intentando alterar mi tabla de interrupciones para controlar la interrupción del teclado. Mi objetivo final es escribir mi nueva rutina de interrupción, copiarme en la RAM y hacer que la tabla de interrupciones en modo real apunte hacia mí.

He encontrado código de muestra al azar en línea, pero Faltan explicaciones sobre cómo obtener la dirección de la interrupción original. Simplemente tienen variables en su lugar y cómo ubicarse en la memoria.

Entonces, mi pregunta es ¿cómo averiguo o imprimo en mi pantalla la tabla de interrupciones en modo real?

Y / O si alguien tiene buenos ejemplos de código para hacer esto, ya sea para deshabilitar ciertas teclas o emitir un pitido en ciertas teclas, realmente lo apreciaría.

¡Gracias!

¿Fue útil?

Solución

En el modo real de 16 bits, la tabla de interrupciones comienza en la dirección 0, con 256 entradas de 4 bytes. Cada uno de los 256 vectores de interrupción obtiene una dirección de 4 bytes (segmento + desplazamiento) en esa tabla.

http://en.wikipedia.org/wiki/Interrupt_descriptor_table tiene más detalles .

Otros consejos

Si su programa se ejecuta en DOS, puede (y probablemente debería) usar la API proporcionada por 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top