我在钩子(Hook)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相同的命令?

最佳答案

这里可能存在许多问题,因为您尚未发布所编写代码的完整 View 。您能否确切说明您要完成的工作?

如果调用了ISR且未对其进行处理,则您将无能为力,因此请记住这一点。您的问题可能与如何在中断 vector 表中安装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

    关于assembly - Hooking Int 09h中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9566821/

    10-13 08:13