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 はリターン キーのスキャン コードのようです。=)