Pergunta

Eu estou tentando alterar a minha mesa de interrupção para assumir a interrupção do teclado. Meu objetivo final é escrever minha nova rotina de interrupção, copie-me em RAM e fazer de modo real de interrupção ponto de mesa para mim.

Eu encontrei aleatória amostra de código online, mas está faltando explicações sobre como obter o endereço da interrupção originais. Eles simplesmente têm variáveis ??em seu lugar, e como colocar-se na memória.

Então, minha pergunta é como faço para descobrir ou imprimir à minha tela de modo real interrupção mesa?

e / ou se alguém tem quaisquer exemplos de código boas de se fazer isso a qualquer certas teclas desativar ou beep em determinadas chaves Eu realmente aprecio isso.

Obrigado!

Foi útil?

Solução

Em modo real de 16 bits, a tabela de interrupção começa no endereço 0, com entradas 256 de 4 bytes. Cada um dos vectores de interrupção 256 recebe um endereço de quatro bytes (segmento + offset) no mesmo quadro.

http://en.wikipedia.org/wiki/Interrupt_descriptor_table tem mais algum detalhe .

Outras dicas

Se o seu programa está sendo executado em DOS, você pode (e provavelmente deve) usar a API DOS fornecido:

  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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top