北京网站开发外包,网站优化锚文本链接之精髓,太仓有做网站的地方吗,杭州科技公司网站建设文章目录 前言1. 背景介绍2. 接口芯片和端口3. 外中断信息3.1 什么是外中断信息3.2 外中断源的分类3.2.1 可屏蔽中断3.2.1.1 什么是可屏蔽中断#xff1f;3.2.1.2 可屏蔽中断的处理过程 3.2.2 不可屏蔽中断3.2.2.1 什么是不可屏蔽中断#xff1f;3.2.2.2 不可屏蔽中断的处理过… 文章目录 前言1. 背景介绍2. 接口芯片和端口3. 外中断信息3.1 什么是外中断信息3.2 外中断源的分类3.2.1 可屏蔽中断3.2.1.1 什么是可屏蔽中断3.2.1.2 可屏蔽中断的处理过程 3.2.2 不可屏蔽中断3.2.2.1 什么是不可屏蔽中断3.2.2.2 不可屏蔽中断的处理过程 4. PC 机键盘的处理过程4.1 键盘输入4.2 引发9号中断4.3 执行int 9中断例程4.3.1 主要过程4.3.2 补充说明 结语 前言 汇编语言是很多相关课程如数据结构、操作系统、微机原理的重要基础。但仅仅从课程的角度出发就太片面了其实学习汇编语言可以深入理解计算机底层工作原理提升代码效率尤其在嵌入式系统和性能优化方面有重要作用。此外它在逆向工程和安全领域不可或缺帮助分析软件运行机制并增强漏洞修复能力。 本专栏的汇编语言学习章节主要是依据王爽老师的《汇编语言》来写的和书中一样为了使学习的过程容易展开我们采用以8086CPU为中央处理器的PC机来进行学习。 1. 背景介绍
以前我们讨论的都是CPU对指令的执行。我们知道CPU 在计算机系统中除了能够执行指令进行运算以外还应该能够对外部设备进行控制接收它们的输入向它们进行输出。 也就是说CPU 除了有运算能力外还要有 I/O Input/Output 输入/输出能力。 比如我们按下键盘上的一个键CPU最终要能够处理这个键。在使用文本编辑器时按下a键后我们可以看到屏幕上出现“a”是CPU将从键盘上输入的键所对应的字符送到显示器上的。
要及时处理外设的输入显然需要解决两个问题
1外设的输入随时可能发生CPU如何得知
2CPU 从何处得到外设的输入
我们以键盘输入为例讨论这两个问题。
2. 接口芯片和端口
前面我们讲过在PC 系统的接口卡和主板上装有各种接口芯片。这些外设接口芯片的内部有若干寄存器CPU 将这些寄存器当作端口来访问。 外设的输入不直接送入内存和CPU 而是送入相关的接口芯片的端口中 CPU 向外设的输出也不是直接送入外设而是先送入端口中再由相关的芯片送到外设。 CPU 还可以向外设输出控制命令而这些控制命令也是先送到相关芯片的端口中然后再由相关的芯片根据命令对外设实施控制。 ✍可见CPU 通过端口和外部设备进行联系。 3. 外中断信息
3.1 什么是外中断信息
现在我们知道了外设的输入被存放在端口中可是外设的输入随时都有可能到达CPU 如何及时地知道并进行处理呢?
更一般地讲就是外设随时都可能发生需要CPU及时处理的事件CPU如何及时得知并进行处理 CPU 提供中断机制来满足这种需要。 前面讲过当CPU的内部有需要处理的事情发生的时候将产生中断信息引发中断过程。这种中断信息来自CPU的内部。
还有一种中断信息来自于CPU外部当CPU外部有需要处理的事情发生的时候比如说外设的输入到达相关芯片将向CPU发出相应的中断信息。CPU在执行完当前指令后可以检测到发送过来的中断信息引发中断过程处理外设的输入。
3.2 外中断源的分类
在PC系统中外中断源一共有以下两类。
3.2.1 可屏蔽中断
3.2.1.1 什么是可屏蔽中断 可屏蔽中断是CPU可以不响应的外中断。 CPU是否响应可屏蔽中断要看标志寄存器的IF位的设置。当CPU检测到可屏蔽中断信息时 如果IF1则CPU 在执行完当前指令后响应中断引发中断过程 如果IF0则不响应可屏蔽中断。
3.2.1.2 可屏蔽中断的处理过程
我们回忆一下内中断所引发的中断过程
1取中断类型码n
2标志寄存器入栈IF0TF0
3CS、IP 入栈
4(IP)(n*4)(CS)(n*42)
由此转去执行中断处理程序。
可屏蔽中断所引发的中断过程 除在第一步的实现上有所不同外基本上和内中断的中断过程相同。
因为可屏蔽中断信息来自于CPU外部中断类型码是通过数据总线送入CPU 的而内中断的中断类型码是在CPU内部产生的。 现在我们可以解释中断过程中将IF置为0的原因了。 将IF置0的原因就是在进入中断处理程序后禁止其他的可屏蔽中断。 当然如果在中断处理程序中需要处理可屏蔽中断可以用指令将IF置1 。 8086CPU 提供的设置IF的指令如下 sti用于设置IF1 cli用于设置IF0。 3.2.2 不可屏蔽中断
3.2.2.1 什么是不可屏蔽中断 不可屏蔽中断是CPU 必须响应的外中断。 当CPU 检测到不可屏蔽中断信息时则在执行完当前指令后立即响应引发中断过程。
3.2.2.2 不可屏蔽中断的处理过程
对于8086CPU 不可屏蔽中断的中断类型码固定为2。所以中断过程中不需要取中断类型码。
不可屏蔽中断的中断过程 标志寄存器入栈IF0TF0 CS、IP入栈 (IP)(8)(CS)(0AH)。
几乎所有由外设引发的外中断都是可屏蔽中断。当外设有需要处理的事件比如说键盘输入发生时相关芯片向CPU 发出可屏蔽中断信息。
不可屏蔽中断是在系统中有必须处理的紧急情况发生时用来通知CPU的中断信息。
在我们的内容中主要讨论可屏蔽中断。
4. PC 机键盘的处理过程
下面我们看一下键盘输入的处理过程并以此来体会一下PC机处理外设输入的基本方法。
4.1 键盘输入
键盘上的每一个键相当于一个开关键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描。 按下一个键时开关接通该芯片就产生一个扫描码扫描码说明了按下的键在键盘上的位置。扫描码被送入主板上的相关接口芯片的寄存器中该寄存器的端口地址为60H 。 松开按下的键时也产生一个扫描码扫描码说明了松开的键在键盘上的位置。松开按键时产生的扫描码也被送入60H 端口中。 一般将按下一个键时产生的扫描码称为通码松开一个键产生的扫描码称为断码。 扫描码长度为一个字节通码的第 7 位为 0 断码的第7位为1即断码 通码80H。
比如g键的通码为22H断码为a2H。
下表是键盘上部分键的扫描码只列出通码。 4.2 引发9号中断
键盘的输入到达 60h端口时相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息。
CPU 检测到该中断信息后如果IF1则响应中断引发中断过程转去执行 int9 中断例程。
4.3 执行int 9中断例程
4.3.1 主要过程
BIOS 提供了int 9中断例程用来进行基木的键盘输入处理主要的工作如下
1读出60H 端口中的扫描码
2如果是字符键的扫描码将该扫描码和它所对应的字符码即 ASCII码送入内存中的 BIOS 键盘缓冲区如果是控制键比如 Ctrl和切换键比如 CapsLock的扫描码则将其转变为状态字节用二进制位记录控制键和切换键状态的字节写入内存中存储状态字节的单元;
3对键盘系统进行相关的控制比如说向相关芯片发出应答信息。
4.3.2 补充说明
BIOS键盘缓冲区是系统启动后BIOS用于存放int 9 中断例程所接收的键盘输入的内存区。该内存区可以存储 15 个键盘输入因为 int 9 中断例程除了接收扫描码外还要产生和扫描码对应的字符码所以在BIOS键盘缓冲区中一个键盘输入用一个字单元存放高位字节存放扫描码低位字节存放字符码。
0040:17 单元存储键盘状态字节该字节记录了控制键和切换键的状态。
键盘状态字节各位记录的信息如下 结语
今天的分享到这里就结束啦如果觉得文章还不错的话可以三连支持一下。
也可以点点关注避免以后找不到我哦
Crossoads主页还有很多有趣的文章欢迎小伙伴们前去点评您的支持就是作者前进的动力