通过轮询中断请求寄存器处理键盘中断(对于x86)

时间:2012-04-08 20:13:45

标签: assembly x86 dos interrupt-handling interrupt

我需要为x86开发程序,它将通过轮询IRR来处理键盘中断。程序应该在ms-dos下以实模式工作。我的主要问题是它不起作用,因为我认为它应该工作:即使没有按下任何键,适当的IRR位也具有非零值,并且从端口0x60读取的值始终为0x1c。 有人可以解释一下我做错了什么吗? 这是我的投票循环:

        in al,21h       ; read old IMR value
        or al,02h       ; disable handling of interrupts from IRQ1
        out 21h,al      ; update IMR value
READ_LOOP:
        mov al,0ah
        out 20h,al
        in al,20h       ; read IRR value
        and al, 02h     ; check request from IRQ1
        jz READ_LOOP
        in al,60h       ; read data from keyboard buffer
        mov dl,al
        and dl,7fh      ; ignore most significant bit value
        mov ah,2h       ; print char
        int 21h
        jmp READ_LOOP

感谢名单!

更新 我错过了键盘缓冲区包含扫描码的事实,因此0x1c似乎是返回键的扫描码。 =)

0 个答案:

没有答案