zoukankan      html  css  js  c++  java
  • 【笔记】【汇编语言】第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中断例程
      略

  • 相关阅读:
    cri-o 与 cni的集成分析
    ocacle sql: 两张表左连接 ,1对多,取一条数据,取按时间最新的
    redis jedis pool 高并发的问题
    Redis事件订阅和持久化存储
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    springboot配置redis
    Spring Boot使用Redis进行消息的发布订阅
    Spring boot中使用aop详解
    springBoot 全局异常捕捉
    pring boot中使用aop详解
  • 原文地址:https://www.cnblogs.com/AzikPhil/p/note_asm2_15.html
Copyright © 2011-2022 走看看