Domanda

Sto cercando di modificare la mia tabella di interrupt per assumere l'interrupt di tastiera. Il mio obiettivo finale è scrivere la mia nuova routine di interrupt, copiarmi nella RAM e fare in modo che la tabella degli interrupt in modalità reale mi punti.

Ho trovato casuale codice di esempio online ma mancano spiegazioni su come ottenere l'indirizzo dell'interrupt originale. Hanno semplicemente delle variabili al loro posto e come mettersi in memoria.

Quindi la mia domanda è: come faccio a capire o stampare sul mio schermo la tabella degli interrupt in modalità reale?

E / O se qualcuno ha qualche buon esempio di codice per farlo per disabilitare determinate chiavi o emettere un segnale acustico su certe chiavi lo apprezzerei davvero.

Grazie!

È stato utile?

Soluzione

Nella modalità reale a 16 bit, la tabella degli interrupt inizia all'indirizzo 0, con 256 voci a 4 byte. Ciascuno dei 256 vettori di interrupt ottiene un indirizzo di 4 byte (segmento + offset) in quella tabella.

http://en.wikipedia.org/wiki/Interrupt_descriptor_table ha qualche dettaglio in più .

Altri suggerimenti

Se il tuo programma è in esecuzione in DOS, puoi (e probabilmente dovresti) usare l'API fornita da 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top