1

IRR をポーリングしてキーボード割り込みを処理する x86 用のプログラムを開発する必要があります。プログラムは、ms-dos の下でリアルモードで動作するはずです。私の主な問題は、機能すると思うように機能しないことです。適切なIRRビットは、キーが押されていなくても0以外の値を持ち、ポート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 はリターン キーのスキャン コードのようです。=)

4

0 に答える 0