第9章BIOS和DOS中断 9,1键盘IO 92显示器IO 93打印机IO 94串行通信口IO
第9章 BIOS和DOS中断 9.1 键盘I/O 9.2 显示器I/O 9.3 打印机I/O 9.4 串行通信口I/O
91键盘IO 键盘的中断有3个 (1)DOS的21H号中断,提供功能较强的读键功能; (2)BIOS的16H号中断,提供较低层次的服务 (3)BIOs的9号中断,这是键盘硬中断,每当键盘上有键 被按下,键盘都会通过接口向CPU提出9号中断请求
9.1 键盘I/O 键盘的中断有3个: (1)DOS的21H号中断,提供功能较强的读键功能; (2)BIOS的16H号中断,提供较低层次的服务; (3)BIOS的9号中断,这是键盘硬中断,每当键盘上有键 被按下,键盘都会通过接口向CPU提出9号中断请求
9119号中断与键盘工作原理 键盘上的按键分为普通键和控制键两类。控制键包括 Shift Ctr、AIt、 Capslock等,其余为普通键。 对于每个普通键,根据各键在键盘上的分布位置对键进行编 码,得到键盘扫描码(P317)。每个键还有ASCI码。 当发生9号中断请求时,表明键盘有按键信息需要送到主机中, 在没有被屏蔽的情况下,CPU将响应该中断,执行一次9号中 断服务程序,处理从键盘传来的信息。 9号中断服务程序的功能主要有:如果是控制键被按下或松开, 就把BOS数据区中的键盘状态字节作相应调整;如果是普通 键,则把按键的扫描码和ASCI码一起存入键盘缓冲区
9.1.1 9号中断与键盘工作原理 键盘上的按键分为普通键和控制键两类。控制键包括Shift、 Ctrl、Alt、CapsLock 等,其余为普通键。 对于每个普通键,根据各键在键盘上的分布位置对键进行编 码,得到键盘扫描码(P317)。每个键还有ASCII码。 当发生9号中断请求时,表明键盘有按键信息需要送到主机中, 在没有被屏蔽的情况下,CPU将响应该中断,执行一次9号中 断服务程序,处理从键盘传来的信息。 9号中断服务程序的功能主要有:如果是控制键被按下或松开, 就把BIOS数据区中的键盘状态字节作相应调整;如果是普通 键,则把按键的扫描码和ASCII码一起存入键盘缓冲区
计算机启动后,在内存较低端物理地址400H起,紧接在中断向量表的 后面)有一段供BIOS使用的数据区,其中包括存放各控制键状态的键盘 状态字节和存放普通键的32字节键盘缓冲区。 键盘缓冲区是一个先进先出的环形队列,共32字节,可以存放15个键的 扫描码和ASCI码。其所占内存区域如下: KBHead dw?;其内存地址为000:04|H,缓冲区头指针 KBTail dw?;其内存地址为000041CH,缓冲区尾指针 KBBuff dw16DUP(2);其内存地址为00004EH, 读键时可以从队列首部取走键值,9号中断则把新的按键置入队列尾部。 当键盘缓冲区已满,而键盘上还有普通键被按下时,键盘仍然会提出中 断申请,但9号中断的服务程序中会忽略该按键,并使计算机的小喇叭 发出“嘀”的一声,以表示缓冲区已满
计算机启动后,在内存较低端(物理地址400H起,紧接在中断向量表的 后面)有一段供BIOS使用的数据区,其中包括存放各控制键状态的键盘 状态字节和存放普通键的32字节键盘缓冲区。 键盘缓冲区是一个先进先出的环形队列,共32字节,可以存放15个键的 扫描码和ASCII码。其所占内存区域如下: KBHead DW ? ;其内存地址为0000:041AH,缓冲区头指针 KBTail DW ? ;其内存地址为0000:041CH,缓冲区尾指针 KBBuff DW 16 DUP(?);其内存地址为0000:041EH, 读键时可以从队列首部取走键值,9号中断则把新的按键置入队列尾部。 当键盘缓冲区已满,而键盘上还有普通键被按下时,键盘仍然会提出中 断申请,但9号中断的服务程序中会忽略该按键,并使计算机的小喇叭 发出“嘀”的一声,以表示缓冲区已满
键盘状态字节在物理地址41TH处,每一位代表一个控制键, 为1表示该键处于按下的状态,为0则是松开的。状态字节 的各个位与控制键的对应关系见表94。 表94状态字节与控制键的对应关系 位号76 4 32 控制键 Insert CapsLock| Num Lock Scroll Lock Alt Ctrl左shif右shif
表9.4 状态字节与控制键的对应关系 位号 7 6 5 4 3 2 1 0 控制键 Insert CapsLock Num Lock Scroll Lock Alt Ctrl 左shift 右shift 键盘状态字节在物理地址417H处,每一位代表一个控制键, 为1表示该键处于按下的状态,为0则是松开的。状态字节 的各个位与控制键的对应关系见表9.4