[汇编语言学习笔记][第十五章 外中断]

时间:2020-12-06 01:20:09

第十五章 外中断

  • 及时处理外设的输入,有以下两个问题

    • 外设的输入随时可能发生,CPU如何得知?
    • CPU从何处得到外设的输入?
      这一章,以键盘输入为例,探讨这个问题。

15.1 接口芯片和端口

外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中。CPU向外设输出,也是要先送入端口,由相关芯片到外设。

CPU通过端口和外部设备进行联系

15.2 外中断信息

外中断信息,来自于CPU外部,当CPU外部有需要处理的事情发生的时候,比如,外部的输入到达,相关芯片将向CPU发出相应的中断信息。CPU在执行完当前指令后,可以检测到发送过来的中断信息,引发中断。

  • 可屏蔽中断

    • 可屏蔽中断是CPU可以不响应的外中断
    • 如果IF=1 则响应, IF=0则不响应
    • sti 使得 IF=1,cli 设置 IF=0
  • 不可屏蔽中断

    • 中断类型码固定为2
      • 标志寄存器入栈,IF=0,TF=0
      • CS,IP入栈
        -(IP)=(08H),(CS)=(0AH)

几乎所有外中断都是可屏蔽中断。

15.3 PC机键盘的处理过程

  • 键盘输入

    • 按下,和松开生成的扫描码都会送入60h端口
    • 按下的扫描码称为通码,松开的扫描码称位断码
    • 断码=通码+80H, 通码第7位为0,断码第7位为1.(从0开始数)
  • 引发 9 号中断

    • 到达60h端口,相关芯片就会向CPU发送中断类型码为9的可屏蔽中断信息
    • 如果IF=1,执行中断。
  • 执行 int 9 中断例程

    • 读出60H端口中的扫描码
    • 如果是字符集扫描码,将该扫描码和所对应的字符码(即ASCII)送入内存中的BIOS键盘缓冲区。
    • 如果是控制键(比如Ctrl)的扫描码,则转变位状态字节(用二进制位记录控制键和切换键状态的字节)写入内存中存储状态字节的单元
    • 对键盘系统进行相关的控制,比如说,向相关芯片发出应答信息。

    键盘缓冲区

    该内存去可以存储15个键盘输入,用一个字单元存放,高位字节放扫描码,低位字节放字符码

    0040:17单元存储状态字节

15.4 编写int 9 中断例程