Frage

Ich versuche, meine Interrupt-Tabelle zu ändern über die Tastatur-Interrupt zu nehmen. Mein Endziel ist meine neue Interrupt-Routine zu schreiben, mich in dem RAM kopieren und den Real-Modus-Interrupt-Tabelle Punkt für mich.

Ich habe zufällig Beispielcode rel="nofollow online, aber es fehlen Erklärungen, wie die Adresse des ursprünglichen Interrupt zu bekommen. Sie haben einfach Variablen an ihrem Platz, und wie es sich setzen in den Speicher.

Also meine Frage ist, wie kann ich herausfinden, oder auf meinen Bildschirm Interrupttabelle die Real-Modus drucken?

und / oder wenn jemand irgendwelche guten Code-Beispiele, dies zu tun, um entweder deaktivieren bestimmte Tasten oder akustisches Signal auf bestimmte Tasten habe ich es wirklich schätzen würde.

Danke!

War es hilfreich?

Lösung

In 16-Bit-Real-Modus, beginnt die Interrupt-Tabelle bei Adresse 0, mit 256 4-Byte-Einträgen. Jede der 256 Interruptvektoren erhält eine 4-Byte-Adresse (Segment + Offset) in dieser Tabelle.

http://en.wikipedia.org/wiki/Interrupt_descriptor_table hat etwas mehr Detail .

Andere Tipps

Wenn Ihr Programm unter DOS läuft, können Sie (und wahrscheinlich sollten) verwenden, um den DOS-API zur Verfügung gestellt:

  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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top