我正在尝试更改我的中断表以接管键盘中断。我的最终目标是编写新的中断例程,将自己复制到RAM中并使实模式中断表指向我。

我在网上找到了随机的示例代码缺少有关如何获取原始中断地址的说明。他们只是在他们的位置有变量,以及如何将自己置于记忆中。

所以我的问题是如何弄清楚或在屏幕上打印实模式中断表?

和/或如果有人有任何好的代码示例,要么禁用某些键或在某些键上发出蜂鸣声,我真的很感激。

谢谢!

有帮助吗?

解决方案

在16位实模式下,中断表从地址0开始,具有256个4字节条目。 256个中断向量中的每一个在该表中获得4字节地址(段+偏移)。

http://en.wikipedia.org/wiki/Interrupt_descriptor_table 有更多细节

其他提示

如果您的程序在DOS下运行,您可以(也可能应该)使用DOS提供的API:

  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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top