答复
代码:
PORT_A EQU 60H ; 8042键盘扫描/诊断输出 STATUS_PORT EQU 64H ; 8042状态口 OUT_BUF_FULL EQU 01H ; 0 = + 输出缓冲器满 INPT_BUF_FULL EQU 02H ; 1 = + 输入缓冲器满 ... ... ... ... SHUT_CMD EQU 0FEH ; 引起停止命令 ;KEYBOARD STATUS REGISTER ; 7 6 5 4 3 2 1 0 Name Allowable Values ; * Parity error 0=odd parity(no error),1=even parity ; * Receive time out 0=no error,1=keyboard did not finish ; * Transmit time out 0=no error,1=keyboard did not finish ; * Inhibit switch 0=keyboard inhibited,1=not inhibited ; * Command/data 0=addressed as port 60H,1=port 64H ; * System flag 0=reset by power ON,1=Self test OK ; * Input buffer full 0=empty,1=full ; * Output buffer full 0=empty,1=full ooo0: in al, STATUS_PORT ; 检测输入缓冲器满 mov bl, al test bl, OUT_BUF_FULL jz short ooo1 ; 若没有,转ooo1 in al, PORT_A ; 冲清 ooo1: test bl, INPT_BUF_FULL ; 输出缓冲器还满吗? jnz ooo0 ; 再次尝试 mov al, SHUT_CMD ; shutdown cmd out STATUS_PORT, al ; 返回到实模式
