微机原理与接口技术,第9章

第九章中断 1基本概念 复习CPU与外设信息交换的控制方式种类以查询方式输入为例 当外设数据未准备好时 CPU需要不断查询外设是否准备好的状态 效率低 1 中断方式示意 以输入中断为例 中断概念 2 什么是中断 CPU暂停执行现行程序 转而处理随机事件 处理完毕后再返回被中断的程序 这一全过程称为中断 3 中断源能够引发CPU中断的信息源 1 外部中断源 硬件中断源 I O设备如键盘 显示器 打印机数据通道如磁带 磁盘时钟如82540 由此引发的中断故障源如掉电 存贮器奇偶校验错 2 内部中断源 软件中断源 执行INT软件中断指令如执行指令INT21HCPU指令执行产生的异常如被0除 单步执行 中断概念 选通信号 4 具有中断请求功能的输入接口示意图 输入设备 锁存器 8 三态缓冲器 8 CPU数据线 RDQ 5V 中断请求触发器 QD 中断允许触发器 数据线D0位 地址译码器 INTR 地址总线 IOW IOR 控制口选中 数据口选中 中断概念 5 中断系统为实现中断而采取的硬件 软件措施 6 中断系统应具备的基本功能 对于硬件中断 接口电路应具备 屏蔽 和 开放 的功能 这种功能由程序员通过软件去控制 能实现中断判优 中断排队 当有多个中断源提出请求时 应能优先响应高级别的中断源 中断概念 能够实现中断嵌套 即高级别的中断源能够中断低级别的中断服务程序 响应中断后 能自动转入中断处理 处理完毕能自动返回断点 设 B 级别高于 A 中断概念 280X86中断指令 1 开中断指令STI功能 使F寄存器中I标志置1 CPU处于开中断状态 2 关中断指令CLI功能 使F寄存器中I标志置1 CPU处于关中断状态 3 软件中断指令INTnn为中断类型码 n为0 255之间有定义的无符号整数 功能 无条件转向n型中断服务子程序 INTn指令的执行过程 CPU响应软件中断的过程 F寄存器 栈 保存INTn之前的F状态 使F中的T标志置0 禁止单步操作I标志置0 CPU处于关中断状态 断口地址 栈先 断口基地址 CS 栈 后 断口偏移地址 IP 栈 CPU从4n 4n 3单元取出n型服务程序入口地址 IP CS 从而转入n型中断服务程序 中断指令 4 中断返回指令IRET 功能 依次从栈顶弹出6个元素 IP CS F如果栈顶是INTn的断口地址 则执行IRET后 返回断点 否则不能 图示执行INTn栈顶示意图 执行IRET示意图 sp 中断指令 IRET是中断服务子程序的出口指令 IRET和RET的区别IRET从栈顶弹出6个元素 IP CS F远程RET 从栈顶弹出4个元素 IP CS近程RET 从栈顶弹出2个元素 IP 中断向量和中断向量表 中断系统是为实现中断而采取的软 硬件措施 中断指令 中断向量和中断向量表是实现中断的重要软件措施 什么是中断向量中断向量是实模式下 中断服务子程序的入口地址 2 中断向量表 所有中断向量的集合 3 中断向量表的设置CPU规定 在实模式下 中断向量表需设置在系统的RAM最低端的1K单元 0 3FFH 它由2部分组成 服务程序所在代码段的段基址2个字节 服务程序入口的偏移地址2个字节 中断向量 4 中断向量表的表地址与中断类型的关系 n型中断向量 如 21H 型中断向量 存放在84H 87H单元中问 9CH型中断向量存放在何处 解 9CH 4 1001110000 270H 9CH型中断向量存于270H 273H单元中 中断向量 5 中断向量的引导作用 CPU响应软件中断的过程 中断向量 6 中断向量表的初始化 由BIOS设计的中断服务程序 如INT16H INT10H 其中断向量在加电时由BIOS负责写入中断向量表 由DOS设计的中断服务程序 如INT21H 其中断向量是在启动DOS时 由DOS负责写入中断向量表 用户程序开发的中断服务程序 由用户程序写入其中断向量 中断向量 问题 用户如何写入中断向量 方法一 用户自己编写程序填写中断向量CLIPUSHDSMOVAX 0000HMOVDS AXMOVBX 4 nMOVAX OFFSETSERVICEMOV BX AXMOVAX SEGSERVICEMOV BX 2 AXPOPDSSTI 中断向量 方法二 DOS设计2个子程序 专门用于中断向量的读出 写入 INT21H的35H子功能 功能 读出n型中断向量入口 AL 中断类型码出口 ES BX n型中断向量 INT21H的25H子功能 功能 写入n型中断向量入口 DS 中断服务程序所在代码段的段基址DX 中断服务程序入口的偏移地址 中断向量 例 把用户程序中以 TIMER 命名的中断服务子程序的入口地址 4 1CH 4 1CH 3单元 中断向量 7 关于中断向量表的说明 在实模式下 系统RAM最低端的1K单元为中断向量表 但是并非每一个表项都是中断向量 BIOS利用某些表项做为 参数指针 参数指针指向的是一群参数 而不是中断服务程序 因此称它们为 向量 是比较合适的 例如 1DH型向量 指向屏幕参数表 1EH型向量 指向软盘参数表 1FH型向量 指向图型字符表 41H型向量 指向第一台硬盘参数表 46H型向量 指向第二台硬盘参数表 用户程序不能改动这些向量 当然也不能执行以1DH 1EH 1FH 41H 46H为中断类型码的软中断指令 否则系统将会瘫痪 中断向量 4系统中断的分类 CPU中断逻辑 CPU中断 软件中断 INTn指令 非屏蔽中断请求 中断控制系统 NMI 可屏蔽中断请求 INTR 系统中断的分类 一 CPU中断 CPU中断是指 CPU执行某些操作而引发的中断 这类中断使用了0 1 3 4 6 7中断号 1 除法错中断 0型中断 CPU执行DIV或IDIV指令 如果除数为0 或者商数超出寄存器的表示范围 CPU自动调用0型中断服务程序 系统中断的分类 2 单步中断 1型中断 3 断点中断 3型中断 当标志寄存器的T标志为1时 CPU一条指令执行完毕 自动调用1型中断服务程序 但是 DOS为1型中断设计的服务程序只有一条IRET指令 CPU执行 INT3 指令后 调用3型中断服务程序 而DOS系统的3型中断服务程序也只有一条IRET指令 注意 单步和断点中断是因为DEBUG程序的需要而设计 系统中断的分类 4 溢出中断 4型中断对应的软件中断指令有两种汇编格式 功能稍有不同 INTO INT4 当FLAG寄存器的溢出标志为1 在这种条件下 执行 INTO 指令 将会调用4型服务程序 否则 如果溢出标志为0 执行 INTO 指令是无效的 DOS为4型中断设计的服务程序也只有一条IRET指令 系统中断的分类 二 软件中断 执行有定义的INTn指令而引发的中断 称为软件中断 在这里 之所以加了 有定义的 这一限制词 是因为并非所有的中断号都有与之配套的中断服务程序 软件中断使用05H 10H FFH中的若干个中断号 软件中断又可分为BIOS中断 DOS中断 1 BIOS中断BIOS中断 占用了05H 10H 1FH中断号 用户程序执行相关的软中断指令可以调用相应的中断服务程序 INT05H屏幕打印 INT10H屏幕显示I O INT11H设备配置检测 系统中断的分类 INT12H测试内存容量 INT13H磁盘I O INT14H串行通信I O INT15HBIOS扩展功能 INT16H键盘I O INT17H打印机I O INT18H启动PC机ROMBASIC AT机 无 INT19H重新装入引导程序 INT1AH实时时钟管理 中断号1DH 1EH 1FH 41H 46H也被BIOS占用了 但是 与这些中断号对应的并不是中断服务程序 也就是说 不存在与这些中断号对应的软中断指令 用户程序如果执行INT1DH INT1FH INT41H INT46H 必将引起系统瘫痪 参看中断向量表的说明 系统中断的分类 2 DOS中断DOS中断 又分为DOS专用中断 DOS保留中断 用户可调用的DOS中断以及保留给用户开发的中断 1 DOS专用中断 22H型中断程序正常结束时 DOS将自动调用该中断返回父进程 23H型中断程序非正常结束时 如 用户按下Ctrl C 或者Ctrl Break中途停止程序的运行 DOS调用该中断 24H型中断程序运行发生严重错误时 例如 对软磁盘文件进行操作的时候 驱动器小门没有关闭 或进行打印操作而打印机没有连通 DOS自动调用此类中断 发出错误信息 Notready Abort Retry Ignore 这些中断是DOS专用的 DOS在调用此类中断之前 还要做些准备工作 因此 用户程序不能直接调用这些中断 系统中断的分类 28H 3FH型中断也为DOS专用 Microsoft公司没有公开这类中断的功能 但是 一些醉心钻研DOS的专家们 仍然破译出一些有价值的信息 例如 INT33H为鼠标器调用 2 用户可调用的DOS中断 20H型中断用户程序执行INT20H指令可结束程序的运行 返回DOS 但必须注意 在执行INT20H之前 必须保证用户程序CS寄存器的内容等于PSP段基址 因此在用户的COM文件中 可以直接使用INT20H返回DOS INT20H与INT21H的0号功能调用 完成相同的操作 21H型中断DOS系统的许多功能都集中在21H型中断服务程序中 用户程序把功能号写入AH寄存器 设置相应的入口参数 然后执行INT21H即可调用不同的功能 我们把执行INT21H指令所完成的功能 称为 DOS系统功能调用 系统中断的分类 25H型中断此类中断在指定的驱动器上 按照扇区号读取信息 26H型中断在指定的驱动器上 按照扇区号写入信息 INT25H INT26H称为 绝对磁盘读写调用 在此类调用中 DOS系统不使用文件控制块 也不使用文件号去管理磁盘文件 而是按照扇区号直接进行磁盘信息的读写 27H型中断中止并驻留程序于内存之中 用户程序执行INT27H可以中止程序的运行 并且把欲驻留的程序段驻留在内存之中 系统中断的分类 60H 66H是保留给用户使用的中断号 DOS没有为它们设计服务程序 启动DOS后 60H 66H型 中断向量 均为0值 正因为如此 如果你没有开发出60H 66H型中断服务程序 没有改写60H 66H型中断向量 千万不可调用此类中断 否则系统瘫痪 3 用户可开发的DOS中断 4 DOS保留的中断 DOS为了自身版本的升级和功能扩充 保留了若干个中断它们是 42H 45H 4BH 5FH 68H 6FH 72H 74H 77H 7FH 以上关于软件中断的概念 在设计应用程序时是十分有用的 实际上 如果不涉及BIOS中断 不涉及DOS中断 用户将无法设计应用程序 系统中断的分类 9 58259中断控制器 外部中断是由CPU以外的中断请求而引发的 如果有多个中断请求 怎样连接至CPU呢 8259A 一 8259的内部结构 1 中断请求寄存器 IRR 寄存引脚IR0 IR7的中断请求信号 IRRi位置1 表明IRi引脚上有了中断请求信号 8259内部结构 2 中断屏蔽寄存器 IMR 寄存程序员写入的中断屏蔽字 屏蔽字某位 1 IMRi位 1 则与该位对应的中断请求信号 IRRi位 就不能送到中断优先权电路 8259内部结构 8259内部结构 如 MOVAL 11111100BOUT屏蔽寄存器口地址 AL 屏蔽IRR7 IRR2的请求开放IRR1 IRR0 如 INAL 屏蔽寄存器口地址ANDAL 11110111BOUT屏蔽寄存器口地址 AL 开放IRR3的请求 对其它位的请求不改变屏蔽 开放的状态 3 优先权电路 排队电路 比较CPU正为之服务的中断源和刚进入优先权电路的中断源 哪一个级别更高 通过判优 选中 其中级别最高的中断源 然后通过控制电路 从INT端向CPU提中断请求 8259内部结构 作用 比较同时送达优先权电路的中断请求 哪一个级别最高 4 中断控制电路 8259内部结构 作用 寄存一组初始化命令字和操作命令字 通过译码产生内部控制信号