挂钩Int 09h中断

时间:2012-03-05 12:41:13

标签: assembly nasm dos

我有一个问题挂钩int 09h我已经将指针更改为我的新Isr,如果我在Windows上调试,每次按下一个键都会触发中断。但是在VMWare中似乎只触发了一次而不是更多。我已经在DOS 6.22中测试过并且完全相同。

我的代码如下:

MyIsr:
pusha
pushf
;tell PIC that interrupt has finished
mov al,0x20
out 0x20,al
popf
popa
iret


如果我使用USB键盘,我可以发送相同的命令,如Ps / 2吗?

1 个答案:

答案 0 :(得分:1)

这里可能存在许多问题,因为您还没有发布您正在编写的代码的完整视图。能否详细解释一下你要完成什么?

如果调用ISR但未处理,则无法执行任何操作,请记住这一点。您的问题可能与您在中断向量表中安装ISR的方式有关。

  • 在实模式下,您可以使用INT 21h,AH = 25h
  • 进行操作
  • 在保护模式下,在DJGPP下,您需要使用DPMI功能(使用INT 21H功能或使用C功能。请参阅DPMI documentation
  • 在PM中运行时也需要锁定ISR的内存,因为内存可以被“分页”(你需要这个用于ISR,因为我们不知道它什么时候会运行)。

无论如何,您的ISR应该更像以下内容:

newInt9:

enter 0,0
push eax

in al, 60h
mov [raw_key], al

mov al, 20h
out 20h, al

pop eax
leave
iret     

; ENDPROC