例8.6
在配置了键盘输入(中断类型09)和打印机输出(中断类型0FH)两种外部设备的8086中断系统中,要求从键盘上接收字符,同时对32字节的输入缓冲区进行测试,如果缓冲区已满,则键盘挂起(禁止键盘中断输入),由打印机输出一个提示信息。
键盘和打印机分别由中断屏蔽寄存器(21H)的1位和7位控制。键盘的输入寄存器端口地址为60H,控制寄存器的端口地址为61H。打印机输出寄存器的端口地址为378H,打印机控制寄存器的端口地址为37AH。
在这种特定情况下,只要求打印机在键盘输入缓冲区满了后,打印出提示信息,因此它可以在屏蔽键盘中断的同时,设置打印机的中断屏蔽位。另外,在中断处理程序中用到的一些指针及计数值要保存在指定的存储单元中,每次进入中断,取出指针及计数值,退出中断时,再把修改后的指针及计数值保存起来。
这个中断程序包括以下几部分:
MAIN 初始化部分,保存09和0FH的原中断向量,设置新的中断向量。主程序用有限循环来模拟。主程序结束时,恢复原中断向量。
KBDINT 键盘中断处理程序。接收按键的扫描码并保存在缓冲区中,如果输入的字符数超过32,则屏蔽键盘中断,允许打印机中断,并调用INIT-PRT子程序初始化打印机。
INIT-PRT初始化打印机,启动适配器,发出选通信号。
PRTINT 打印机中断处理程序。按照指针取出打印机字符送到输出寄存器,发出选通信号。
DISPLAY-HEX 用十六进制显示AL中的代码。
|
|