【笔记】【汇编语言】第15章 外中断

15.0 概述
  CPU除了要能执行指令,进行运算,还需要能对外部设备进行控制,接受它们的输入,向它们输出.
  要及时处理外设的输入,需要解决两个问题:(1) 外设的输入随时可能发生,CPU如何得知? (2) CPU从何处得到外设的输入?
  下面将以键盘为例,讨论这两个问题.
 
15.1 接口芯片和端口
  CPU通过端口和外部设备进行联系.(与编程人员通过改写寄存器控制CPU的道理一样)
 
15.2 外中断信息
  CPU得知有外设输入需要处理的途径.
  外中断分为两类:
  1.可屏蔽中断
    可屏蔽中断是CPU可以不响应的外部中断,要看标志寄存器IF位的设置.如果IF=0,则不响应,如果IF=1,则响应.
    8086CPU提供的设置IF的指令如下:
    sti ;设置IF=1
    cli ;设置IF=0
    响应可屏蔽外中断的过程与内中断类似:(除第一步取类型码的实现方式有些不同)
    (1) 取中断类型码n
    (2) pushf,IF=0,TF=0
    (3) push CS,push IP
    (4) IP=(n*4),(CS)=(n*4+2)
  2.不可屏蔽中断
    中断类型码固定为2,CPU必须响应的外中断.
    (1) pushf,IF=0,TF=0
    (2) push CS,push IP
    (3) IP=(8),(CS)=(0AH)
  几乎所有外设发出的中断都是可屏蔽中断.不可屏蔽中断是系统中有必须处理的紧急情况发生时用来通知CPU的中断信息.
 
15.3 PC机键盘的处理过程
  1.键盘输入
    键盘上的每一个键相当于一个开关,键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描.
    按下一个按键时,天关接通,产生一个扫描码,扫描码说明了按下的键在键盘上的位置,扫描码被送入主板上相关接口芯片的寄存器中,该寄存器的端口地址为60h.
    当松开一个按键时,也产生一个扫描码,也被送入60h端口中.
    一般按下按键的时候产生的扫描码叫通码,松开按键产生的扫描码叫断码,通码的第7位为0,断码的第7位为1,即:断码=通码+80h.
  2.引发9号中断
    键盘的输入到达60h端口时,相关芯片就会向CPU发出中断类型码为9的可屏蔽中断信息,若此时IF=1,则响应中断,引发中断过程.
  3.执行int 9中断例程
    BIOS提供了int 9中断例程,用来执行基本的键盘输入处理,主要的工作如下:
    (1) 读出60h端口中的扫描码
    (2) 如果是字符键的扫描码,则将扫描码和对应的字符码(ASCII)送入内存中的BIOS键盘缓冲区;如果是控制键和切换键,则将其转变的状态字节写入内存中存储状态字节的单元.
    (3) 对键盘系统进行相关的控制,比如向相关芯片发出应答信息等.
    BIOS键盘缓冲区是系统启动后用于存放int 9中断例程所接收的键盘输入的内存区,可存储15个键盘输入,每个输入占用一个字单元,高位字节存放扫描码,低位字节存放字符码.
    
    >>>>0040:17单元礁键盘状态字节<<<< 各位记录信息如下:
    0:右shift键 1:左shift键 2:Ctrl键 3:Alt键 4:ScrollLock状态 5:NumLock状态 6:CapsLock状态 7:Insert状态 (置1表示按下或开启)
    
15.4 编写int 9中断例程

15.5 安装新的int 9中断例程

实验15 安装新的int 9中断例程
  略

原文地址:https://www.cnblogs.com/AzikPhil/p/note_asm2_15.html