zoukankan      html  css  js  c++  java
  • [汇编语言学习笔记][第十五章 外中断]

    第十五章 外中断

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

      • 外设的输入随时可能发生,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 中断例程

  • 相关阅读:
    如何评价ionic和react native?
    ionic 之 基本布局
    TensorFlow中文社区---下载与安装
    深入代码详谈irqbalance【转】
    用Gen4消除电容触摸屏设计屏障【转】
    如何解决触摸屏的电磁干扰问题【转】
    Linux firmware 加载【转】
    Linux Shell 文本处理工具集锦【转】
    刷leetcode是什么样的体验?【转】
    知乎上的一些文章---leetcode【笔记1】
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480512.html
Copyright © 2011-2022 走看看