汇编语言 第十五章 外中断

以键盘输入为例,讨论①外设的输入随时可能发生,CPU 如何得知?②CPU 从何处得到外设的输入?

15.1 接口芯片和端口

外设的输入送入相关接口芯片的端口中,CPU 向外设的输出也是先送入端口中,再由相关芯片送到外设。

15.2 外中断信息

终端信息,来自于 CPU 外部,CPU 检测到发送过来的中断信息,引发中断过程,处理外设的输入。 1. 可屏蔽中断

CPU 可以不响应的外中断。若 IF = 1,则 CPU 执行完当前指令后响应中断,引发中断过程;如果 IF = 0,则不响应可屏蔽中断。

内中断引发的中断过程:

  1. 取中断类型码 n;
  2. 标志寄存器入栈,IF = 0,TF = 0;
  3. CS、IP 入栈;
  4. (IP)=(n*4),(CS)=(n*4+2)

可屏蔽中断与内终端只有第一步的实现有所不同,其余基本相同。可屏蔽中断信息来自于 CPU 外部。同时 IF 设置为 0 的原因是:在进行中断处理程序后,进制其他的可屏蔽终端。如果需要在中断处理程序中处理可屏蔽中断,用指令将 IF 置 1。8086CPU 提供的设置 IF 的指令如下:sti(设置 IF=1)、cli(设置 IF=0)。

  1. 不可屏蔽中断

    CPU 检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。对于 8086CPU,不可屏蔽中断的中断类型码固定为 2,所以中断过程中,不需要中断类型码:

    1. 标志寄存器入栈,IF = 0,TF = 0;
    2. CS、IP 入栈;
    3. (IP)=(8),(CS)=(0AH)。

    几乎所有外设引发的中断,都是可屏蔽中断。

15.3 PC 机键盘的处理过程

  1. 键盘输入

    每个键相当于一个开关,键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描。按下/松开一个键,该芯片都产生一个扫描码,扫描码被送入主板上的相关接口芯片的寄存器中,端口地址为 60h。

    一般将按下一个键产生的扫描码称为通码,松开一个键产生的扫描码称为断码。扫描码的长度为一个字节,通码第 7 位为 0,断码的第 7 位为 1。

    断码 = 通码 + 80h。

  2. 引发 9 号中断

    键盘输入到达 60h 端口时,相关芯片向 CPU 发出中断类型码为 9 的可屏蔽中断信息,CPU 检测到该中断信息后,若 IF=1,引发中断过程,执行 int 9 中断例程。

  3. 执行 int 9 中断例程

    1. 读出 60h 端口中的扫描码;
    2. 若果是字符键,将该扫描码和其对应的 ACII 码送入内存中的 BIOS 缓存区;如果是控制键,则将其转变为状态字节写入内存中存储状态字节的单元。
    3. 对键盘系统进行相关控制。

15.4 编写 int 9 中断例程

略。

15.5 安装新的 int 9 中断例程

略。

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×