170504 汇编-外中断和键盘输入的处理

xiaoxiao2021-02-28  59

1625-5 王子昂 总结《2017年5月4日》 【连续第215天总结】 A. 汇编语言 15章 20% B. CPU在计算机系统中,除了要执行指令、进行运算以外,还需要控制外部设备,例如鼠标、键盘等等 那么就有两个问题: CPU如何监听外设的消息 CPU从何处得到外设的数据 PC系统的接口卡和主板上有各种接口芯片,芯片内部有若干寄存器,CPU将它们作为端口来访问 因此,CPU通过端口来和外部设备进行通信 那么当外设发来数据的时候,CPU如何监听呢? CPU提供了中断机制来满足这种需要。 外部设备的中断消息称之为外中断 外中断分为两类: 可屏蔽中断 这是CPU可以不响应的外中断。是否相应由flag的IF位的设置,0则不响应;1则响应。 因此,之前内中断里提到的过程有一步是将IF置0,就是为了禁止其他的可屏蔽中断。 CPU提供两条指令设置IF,分别是sti(IF置1)和cli(IF置0) 不可屏蔽中断 这是CPU必须响应的外中断。当CPU检测到不可屏蔽中断时,必须在当前指令执行完后立即响应。 对于8086CPU,不可屏蔽中断的中断类型码固定为2。 几乎所有由外设引发的外中断都是可屏蔽中断。不可屏蔽中断仅在系统发生必须处理的紧急情况时才会出现。 键盘输入的处理过程: 按下一个键时,键盘上的芯片产生一个扫描码,送入接口芯片的寄存器中,端口地址为60h 松开一个键时,芯片也会产生一个扫描码,同样送入60h端口中 一般将按下一个键时产生的扫描码称为通码,松开产生的称为断码。 扫描码长度为一个字节,通码的第7位为0,断码的第7位为1,即: 断码=通码+80h 键盘的输入到达60h端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息。 BIOS提供了int 9中断例程。 读出端口中的扫描码 判断扫描码:如果是字符键的扫描码,则将扫描码和其对应的ASCII码送入内存中的BIOS键盘缓冲区;如果是控制键(如Ctrl)或切换键(如CapsLock)的扫描码,则将其转变为状态字节写入内存中存储状态字节的单元 对键盘系统进行相关的控制,比如说向相关芯片发出应答信息 BIOS键盘缓冲区是系统启动后,BIOS用于存放int9 中断例程所接收的键盘输入的内存器,可以存储15个键盘输入。每个键盘输入用一个字单元存放,高位字节存放扫描码,低位字节存放对应的ASCII码 0040:17单元存储键盘状态字节,记录了控制键和切换键的状态。 0 1 2 3 4    5     6      7 右shift 左shift Ctrl Alt     ScrollLock  NumLock  CapsLock Insert C. 明日计划 PYQT 汇编语言
转载请注明原文地址: https://www.6miu.com/read-43447.html

最新回复(0)