一、每次都写个题记
我的电脑键盘映射对应第一个:
说了好多,其实看不太懂:
端口操作两个:0x60(数据端口) 0x64(命令端口)
注意点:1.中段结束EOI发送
2.键盘如果不读取内容,是自动添置的,下一次数据填充不进来的
3.键盘每次有两次数据的 mark break(过滤掉)
4.很蛋疼一点 每次端口读写的时候注意 xor eax,eax
键盘中断实现步骤1.前面说过的实例化中断对应的中断向量,开启键盘中断
2.通过60读取内容,查找对应的数据
3.上面的注意点,
好了一个简单的键盘中断可以工作了
二、代码
;键盘中断的处理key_interrupt: pushad xor eax,eax mov al,0x20 ;中断结束命令EOI out 0xa0,al ;向8259A从片发送 out 0x20,al mov al,0xAD ;关闭键盘 out 0x64,al ;获取状态 in al,0x64 test al,0x01 jz .end ;结束 输出缓冲区没有内容 in al,0x60 ;读取数据 test al,0x80 jnz .end mov ecx,eax ;得到数据段的地址 mov eax,core_data_seg_sel mov ds,eax mov ebx,key_map mov byte cl,[ebx+ecx] call put_char .end: mov al,0xAE ;开启键盘 out 0x64,al popad iret
下面是个效果图: