




已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理 汇编与接口技术 朱定华 7 1 7 2 7 3 中断和中断系统 中断控制器8259A 中断系统和中断指令 第七章中断技术 7 4 实地址方式下的可屏蔽中断服务程序的设计 7 1中断和中断系统 早期的计算机没有中断功能 CPU和外设之间的信息交换采用的是查询方式 CPU的大部分时间都浪费在反复查询上 这就妨碍了计算机高速性能的充分发挥 产生了快速的CPU与慢速的外设之间的矛盾 这也是计算机在发展过程中遇到的严重问题之一 为解决这个问题 一方面要提高外设的工作速度 另一方面引入了中断 所谓中断 是指计算机在正常运行的过程中 由于种种原因 使CPU暂时停止当前程序的执行 而转去处理临时发生的事件 即执行中断服务程序 处理完毕后 再返回去继续执行暂停的程序 使用中断技术 使得外部设备与CPU不再是串行工作 而是分时操作 从而大大提高了计算机的效率 为了实现中断功能而设置的各种硬件和软件 统称为中断系统 7 1 1中断的概念 1 中断请求引起中断的原因或发出中断申请的来源 称为中断源 当外部中断源要求CPU为它服务时 就输出一个中断请求信号加载到CPU的中断请求输入端 这就是对CPU的中断申请信号 由于每个中断源向CPU发出中断请求信号是随机的 而CPU是在现行指令周期结束时 才检测有无中断请求信号发生 故在现行指令执行期间 必须把随机输入的中断请求信号锁存起来 并保持至CPU响应后才可以清除 因此 每一个中断源都设置有一个中断请求触发器来记载它的中断申请信号 7 1 2中断请求与控制和中断源的识别 2 中断源识别当系统有多个外部中断源时 一旦发生中断 CPU必须确定是哪一个中断源 识别的方法 每个中断源都有一条中断请求信号线 且固定其中断服务程序的入口地址 CPU根据中断信号线 就可以进入相应的中断服务程序 向量中断 使用向量中断系统的中断源除了能输出中断请求信号外 还能输出一个中断向量 CPU根据这个中断向量能够获得该中断源的中断服务程序的入口地址 80 x86CPU采用向量中断 并把中断向量称作中断类型码 系统为每一个中断源指定一个中断类型码 中断源在其中断请求被CPU响应后 将它的中断类型码送到数据线上 与此同时 CPU将数据线上的中断类型码读入 根据中断类型码能够进入该中断源的中断服务程序 7 1 2中断请求与控制和中断源的识别 7 1 2中断请求与控制和中断源的识别 3 中断控制对外部中断源的中断有两级控制 中断屏蔽和中断允许 在每一个外部中断源的中断请求电路中 增加一个中断屏蔽触发器 将中断源输出的中断请求信号与中断触发器的输出相与后再作为该中断源的中断请求信号 中断屏蔽触发器的状态就控制了外部中断源的中断请求是否被送至CPU CPU内部有一个中断允许触发器 只有当其允许中断 即开中断 时 CPU才能响应中断 若不允许中断 即关中断 时 即使CPU的中断请求线上有中断请求 CPU也不响应 80 x86的中断允许触发器是由其标志寄存器的中断标志位IF来控制的 中断标志位的状态可由STI和CLI指令来改变 1 实现中断及返回 当某一中断源发出中断申请时 CPU能决定是否响应这个中断请求 当CPU在执行更紧急 更重要的工作时 可以暂不响应中断 若允许响应这个中断请求 CPU必须在现行的指令执行完后 把断点处的 E IP和CS值 即下一条应执行的指令的地址 各个寄存器的内容和标志位的状态 推入堆栈保留下来 称为保护断点和现场 然后才能转入中断源的服务程序 当中断处理完后 再恢复被保留下来的各个寄存器和标志位的状态 称为恢复现场 使CPU返回被中断的程序 7 1 3中断系统的功能 2 实现优先权排队 通常 在系统中有多个中断源 会出现两个或多个中断源同时提出中断请求的情况 这样就必须要设计者事先根据轻重缓急给每个中断源确定一个中断级别 即优先权 当多个中断源同时发出中断申请时 CPU能找到优先权级别最高的中断源 响应它的中断请求 在优先权级别高的中断源处理完了以后 再响应级别较低的中断源 7 1 3中断系统的功能 3 高级中断源能中断低级的中断处理 当CPU响应某一中断请求 在进行中断处理时若有优先权级别更高的中断源发出中断申请 则CPU要能中断正在进行的中断服务程序 保留这个程序的断点和现场 类似于子程序嵌套 响应高级中断 在高级中断处理完以后 再继续执行被中断的中断服务程序 而当发出新的中断申请的中断源的优先级别与正在处理的中断源同级或更低时 CPU就先不响应这个中断申请 直至正在处理的中断服务程序执行完以后才去响应这个新的中断申请 7 1 3中断系统的功能 CPU在现行指令结束后响应中断 CPU就响应中断 转入中断响应周期 中断响应及中断过程如下 1 关中断 2 保留断点 3 给出中断入口地址 转入相应的中断服务程序 4 保护现场 5 执行中断服务程序 7 中断返回 7 1 4CPU对外部可屏蔽中断的响应及中断过程 6 恢复现场 关中断 在CPU响应中断后 发出中断响应信号的同时 内部自动地关中断 保留断点 CPU响应中断后把IP和CS推入堆栈保存 以备中断处理完毕后 能返回被中断程序 7 1 4CPU对中断的响应及中断过程 保护现场 为了使中断处理程序不影响被中断程序的运行 故要把断点处的有关的各个寄存器的内容和标志位的状态 推入堆栈保护起来 80 x86是由软件 即在中断服务程序中 把要用到的寄存器的内容用PUSH指令推入堆栈 而标志位的状态是在保留断点的同时由硬件推入堆栈的 7 1 4CPU对中断的响应及中断过程 给出中断入口地址 转入相应的中断服务程序 80 x86是根据中断源提供的中断类型码读取中断向量表或中断描述符表得到中断服务程序入口地址的 恢复现场 把所保存的各个内部寄存器的内容和标志位的状态 从堆栈弹出 送回CPU中的原来位置 这个操作是用POP指令来完成的 80 x86的标志位的状态由硬件恢复 7 1 4CPU对中断的响应及中断过程 中断返回 在中断服务程序的最后要安排一条中断返回指令 将堆栈内保存的 E IP和CS值弹出 运行就转移到被中断程序 80 x86的中断返回指令还将堆栈内保存的标志状态弹出给标志寄存器 使系统恢复中断前的状态 7 1 4CPU对中断的响应及中断过程 7 1 7 3 中断和中断系统 中断控制器8259A 中断系统和中断指令 第七章中断技术 7 4 实地址方式下的可屏蔽中断服务程序的设计 7 2 Intel8259A是8080 8085以及80 x86的可编程的中断控制器 80 x86是通过它来管理中断的 它具有8级优先权控制 通过级联可扩展至64级优先权控制 每一级中断都可以屏蔽或允许 在中断响应周期 8259A可提供相应的中断类型码 从而能迅速地转至中断服务程序 7 2中断控制器8259A 8259A的内部组成如下图 7 2 18259的组成和接口信号 1 在中断请求输入端IR7 IR0上接受中断请求 2 中断请求锁存在IRR中 并与IMR相 与 将未屏蔽的中断送给优先级判定电路 3 优先级判定电路检出优先级最高的中断请求位 并置位该位的ISR 4 控制逻辑接受中断请求 输出INT信号 7 2 28259A处理中断的过程 5 CPU接受INT信号 进入连续两个中断响应周期 单片使用或是由CAS2 CAS0选择的从片8259A 就在第2个中断响应周期 将中断类型向量从D7 D0线输出 如果是作主片使用的8259A 则在第1个中断响应周期 把级联地址从CAS2 CAS0送出 6 CPU读取中断向量 转移到相应的中断处理程序 7 中断的结束是通过向8259A送一条EOI 中断结束 命令 使ISR复位来实现的 在中断服务过程中 在EOI命令使ISR复位之前 不再接受由ISR置位的中断请求 7 2 28259处理中断的过程 8259A单片使用如图所示 7 2 38259A的级联连接 在IR7 IR0上输入中断请求 INT和与CPU相连接 这时 中断请求输入共计有IR0 IR7 共8个级别 8259A级联连接如右图 7 2 38259A的级联连接 8259A的命令字包括初始设定的初始化命令字ICW和操作过程中给出的操作命令字OCW 7 2 48259A的命令字 初始化命令字ICW包括ICW1 ICW44个命令字 用于设定8259A的工作方式 中断类型码等 对于80 x86CPU ICW命令字设置过程如下图所示 7 2 48259A的命令字 LTIM 1为电平触发中断 0为边沿触发中断 SNGL 1为单独使用 0为级连使用 IC4 1为设置IC4 0为不设置IC4 T7 T3 中断类型码高5位 低3位为IR7 IR0编码后的值 ID2 ID0 从片的识别地址 存放IR7 IR0编码后的值 从片使用 S7 S0 主片的IR7 IR0上连接从片8259A时 相对应的位为1 主片使用 SFNM 1为特殊全嵌套方式 0为全嵌套方式 AEOI 1为自动结束中断方式 0为非自动结束中断方式 BUF 1为缓冲方式 0为非缓冲方式 M S 1为主片 0为从片 例7 1试按照如下要求对8259A设置初始化命令字 系统中仅用一片8259A 中断请求信号采用边沿触发方式 中断类型码为08H 0FH 用全嵌套 缓冲 非自动结束中断方式 8259A的端口地址为20H和21H 该片8259A的初始化设置的程序段如下 MOVAL 13H ICW1 边沿触发 单片 设置IC4OUT20H ALMOVAL 8 ICW2 中断类型码为8 FHOUT21H ALMOVAL 0DH ICW4 全嵌套 缓冲 非自动结束中断方式OUT21H AL 例7 2试对一个主从式8259A进行初始化命令字的设置 从片的INT与主片的IR2相连 从片的中断类型码为70H 77H 端口地址为A0H和A1H 主片的中断类型码为08H 0FH 端口地址为20H和21H 中断请求信号采用边沿触发 采用全嵌套 缓冲 非自动结束中断方式 主片初始化程序段 MOVAL 11H ICW1OUT20H ALMOVAL 8 ICW2 中断类型码为08H 0FHOUT21H ALMOVAL 4 ICW3 IR2上连接从片OUT21H ALMOVAL 0DH ICW4OUT21H AL 从片初始化程序段 MOVAL 11HOUT0A0H ALMOVAL 70H ICW2 中断类型码为70H 77HOUT0A1H ALMOVAL 2 ICW3 从片的识别地址 即主片的IR2OUT0A1H ALMOVAL 9OUT0A1H AL 80 x86PC在上电初始化期间 BIOS已设定8259A的初始化命令字 用户不必设定 操作命令字OCW是操作过程中给出的命令 初始设定结束后的命令字都是OCW OCW包括OCW1 OCW33个命令字 如下图所示 7 2 48259A的命令字 OCW1是对IMR置位 复位的命令 置位位对应的中断被屏蔽 以A0 1读 写OCW1命令字 即读 写IMR OCW2是中断结束 EOI 的命令字 用于复位ISR及改变优先级 以A0 0写OCW2命令字 EOI命令有2个 一个是一般EOI 对正在服务的ISR复位 其命令字是20H 另一个是指定EOI 对L2 L0指定的ISR复位 对8259A的IR7 IR0对应的ISR复位的命令字分别是67H 60H OCW3是读ISR和IRR以及指定设置特殊屏蔽方式的命令 以A0 0进行写入 由D4D3两位特征位来区别 00为OCW2 01为OCW3 注意 只要命令字的D4位为 1 地址位A0为 0 就是ICW1命令字 所以 特征位若为1 则是ICW1 以A0 0来读ISR和IRR及中断状态 在通常方式的中断服务过程中 ISR设置期间对优先级更低的中断请求不响应 特殊屏蔽方式是可以解除这种禁止中断状态的方式 在这种方式时 除了由ISR设置的位和由IMR屏蔽的位对应的中断外 其它所有级别的中断均可响应 7 1 7 2 中断和中断系统 中断控制器8259A 中断系统和中断指令 第七章中断技术 7 4 实地址方式下的可屏蔽中断服务程序的设计 7 3 它可以处理256种不同类型的中断 其中每一种中断都规定了一个唯一的中断类型编码 即中断向量 CPU根据中断类型编码来识别中断源 80 x86有两类中断 内部 软件 中断 即由指令的执行所引起的中断 外部 硬件 中断 即由外部 主要是外设 的请求引起的中断 PC机中断系统的功能极强 其结构简单而且灵活 7 3中断系统和中断指令 80 x86设置的中断指令和中断返回指令如下 指定类型中断指令INTN溢出中断指令INTO中断返回指令IRET IRETD 当程序需要转移到某一指定的中断服务程序时 可以设置一条中断指令 使程序转移到所指定的中断服务程序 通过中断指令实现的中断称为软件中断 7 3 1中断指令 1 INTN指令中断 类型N中断 这条指令的执行引起中断 而且中断类型由指令中的N加以指定 2 INTO指令中断 类型4中断 若上一条指令执行的结果 使溢出标志位OF 1 则INTO指令引起类型为4的内部中断 否则 此指令不起作用 程序执行下一条指令 IRET是中断返回指令 它的作用与RET指令类似 都是使控制返回主程序 但是IRET是远返回 且除了从堆栈中弹出偏移地址 给IP 和段地址 给CS 外 还弹出中断时进栈保护的标志寄存器的内容 给F IRETD是32位的中断返回指令 它的作用与IRET指令类似 不同的仅是从堆栈中弹出的偏移地址是给EIP 7 3 1中断指令 80 x86微处理器芯片均有两条外部中断请求线 NMI nonmaskableinterrupt非屏蔽中断 INTR 可屏蔽中断 7 3 2外部中断 出现在INTR线上的中断请求 CPU是否响应要取决于标志位IF的状态 若IF 1 则CPU就响应 此时CPU是处在开中断状态 若IF 0 则CPU就不响应 此时CPU是处在关中断状态 而IF标志位的状态 可以用指令STI使其置位 即开中断 也可以用CLI指令来使其复位 即关中断 7 3 2外部中断 要注意 在系统复位以后 标志位IF 0 另外 任一种中断 内部中断 NMI INTR 被响应后 IF 0 所以 若允许中断嵌套 就必须在中断服务程序中用STI指令开中断 7 3 2外部中断 CPU是在当前指令周期的最后一个T状态采样中断请求线 若发现有可屏蔽中断请求 且中断是开放的 IF标志为 1 则CPU转入中断响应周期 80 x86CPU进入两个连续的中断响应周期 每个响应周期都由4个T状态组成 而且都发出有效的中断响应信号 请求中断的外设 必须在第二个中断响应周期的T3状态 把中断向量 类型码 送到数据总线 通常通过8259A传送 CPU在T4状态的前沿采样数据总线 获取中断向量 接着就进入了中断处理程序 7 3 2外部中断 出现在NMI线上的中断请求 不受标志位IF的影响 在当前指令执行完以后 CPU就响应 NMI线上的中断请求信号是边沿触发的 它的出现是异步的 由内部把它锁存 要求NMI上的中断请求脉冲的有效宽度 高电平的持续时间 要大于两个时钟周期 7 3 2外部中断 非屏蔽中断的优先权高于可屏蔽中断 CPU采样到有非屏蔽中断请求时 自动给出中断向量类型码2 而不经过上述的可屏蔽中断那样的中断响应周期 NMI INTR这两条中断请求线是远不能满足实际需要的 80 x86微处理器用8259A作为外设向CPU申请中断和CPU对中断进行各种控制的接口 它把80 x86的一条可屏蔽中断线INTR扩展成8 64条中断请求线 7 3 2外部中断 对于某些重要的中断事件 CPU通过自己的内部逻辑 调用相应的中断服务程序 而不是由外部的中断请求来调用 这种由CPU自己启动的中断处理过程 称为内部中断 内部中断有如下3类 7 3 3内部中断 故障是指某条指令在启动之后 真正执行之前 就被检测到异常而产生的一种中断 出现故障时 CPU将产生异常操作指令的地址保存到堆栈中 然后进入故障处理程序并排除该故障 从故障处理程序返回后 再执行曾经产生异常的指令 使程序正常地继续执行下去 7 3 3内部中断 陷阱是在指令执行过程中引起的中断 这类异常主要是由执行除法指令或中断调用指令 INTN 引起的设置陷阱指令的下一条指令的地址就是断点 出现陷阱中断时 把 E IP和CS即断点推入堆栈保存后就进入该陷阱处理程序 陷阱中断处理完后 返回到该断点处继续执行 7 3 3内部中断 异常中止通常是由硬件错误或非法的系统调用引起的 一般无法确定造成异常指令的准确位置 程序无法继续执行 系统也无法恢复原操作 必须重新启动系统 7 3 3内部中断 7 3 4中断类型码及中断种类 7 3 5中断向量表和中断描述符表 中断向量表中前5个中断向量 或中断类型 由Intel专用 系统又保留了若干个中断向量 余下的就可以由用户用 可作为外部中断源的向量 外部中断源 只要先将中断服务程序的入口地址填入中断向量表 在第二个中断响应周期 向数据总线送出一个字节的中断类型码N 即可以转至该中断源的中断服务程序 例7 3若80 x86系统采用的8259A的中断类型码为88H 试问 这个中断源的中断请求信号应连向8259A的哪个中断输入端 中断服务程序的段地址和偏移地址应分别填入哪两个字单元 根据ICW2可知 中断类型码的低3位即是8259AIRi的i值 而88H的低3位为000 故中断源的中断请求信号连接到8259A的IR0输入端 中断服务程序的偏移地址和段地址分别填入4n和4n 2两个字单元 而4 88H 220H 故段地址填入00222H字单元 即00222H和00223H两个字节单元 偏移地址填入00220H字单元 即00220H和00221H两个字节单元 7 3 5中断向量表和中断描述符表 在保护方式下 为每一个中断定义了一个中断描述符来说明中断服务程序的入口地址和属性 所有的中断描述符都集中存放在中断描述符表中 由中断描述符表取代了实地址方式下的中断向量表 中断描述符包含3个内容 一是描述符索引DI 由此可以获得段基址等 二是32位的偏移地址 三是相关段的参数 这些参数指示引起中断的原因属于哪一类 80 x86对各种中断的响应和处理过程是不相同的 其主要区别在于如何获取相应的中断类型码 向量 对于硬件 外部 中断 CPU是在当前指令周期的最后一个T状态采样中断请求输入信号 如果有可屏蔽中断请求 且CPU处在开中断状态 IF标志为1 则CPU转入两个连续的中断响应周期 在第二个中断响应周期的T4状态前沿 读取数据线获取由外设输入的中断类型码 若是非屏蔽中断请求 则CPU不经过上述的两个中断响应周期 而在内部自动产生中断类型码2 7 3 6中断响应和处理过程 80 x86CPU在响应中断请求后 由硬件自动完成如下操作 获取中断类型码 生成中断向量表或中断描述符表的位移量 2 把CPU的标志寄存器进栈 保护各个标志位 3 清除IF和TF标志 屏蔽INTR中断和单步中断 4 保存被中断程序的断点推入堆栈保护 5 从中断向量表或中断描述符表获取中断服务程序的入口地址 进入被响应中断的中断服务程序 7 3 6中断响应和处理过程 中断响应过程 7 3 6中断响应和处理过程 7 1 7 3 中断和中断系统 中断控制器8259A 中断系统和中断指令 第七章中断技术 7 2 实地址方式下的可屏蔽中断服务程序的设计 7 4 外部设备的中断请求信号是由中断控制器8259A转发给CPU的 转发过程为 外部设备的中断请求信号由8259A的中断输入线IR7 IR0进入8259A的中断请求寄存器IRR寄存 经过8259A的优先权分析器和中断屏蔽寄存器的分析处理 由8259A的中断输出线INT输出给80 x86的INTR线 向80 x86CPU申请中断 CPU响应中断后 向8259A发回中断响应信号并读取8259A送出的中断类型码 7 4实地址方式下的可屏蔽中断服务程序的设计 所以80 x86PC机的可屏蔽中断服务程序的设计主要有两个方面 第一 根据8259A中断输入线对应的中断类型码 将中断服务程序的入口地址填入中断向量表 第二 向8259A写入操作命令字 初始化命令字系统已设置 对中断屏蔽与中断结束进行处理 7 4实地址方式下的可屏蔽中断服务程序的设计 根据中断类型码将其中断服务程序入口地址装入中断向量表中 有直接装入和调用系统功能调用装入两种方法 下面以PCXT机为例说明装入的方法 PCXT微机系统仅使用1片8259A 它的8个中断输入端IR0 IR7分别定义为IRQ0 IRQ7 PCXT机留给用户使用的可屏蔽中断为IRQ2 从其总线插座的B4引出 PCXT机初始化8259A时写入的中断类型码为08H 0FH 分别对应IRQ0 IRQ7 所以IRQ2的中断类型码为0AH 7 4 1中断服务程序入口地址的装入 假定中断服务程序为INT SUB 直接装入程序段为 SUBAX AXMOVES AX 中断向量表的段地址为0MOVAX OFFSETINT SUBMOVES 28H AX IRQ2的中断类型码为0AH MOVAX SEGINT SUB 0AH 4 28HMOVES 2AH AX 7 4 1中断服务程序入口地址的装入 功能调用号为25H 入口参数为AL置中断类型码 DS DX置入口地址 装入程序段如下 MOVAX SEGINT SUBMOVDS AXMOVDX OFFSETINT SUBMOVAX 250AHINT21H 7 4 1中断服务程序入口地址的装入 8259A内有一个中断屏蔽寄存器IMR 它的每一位对应着一个中断输入线 即Mi与IRi对应 当Mi 1就屏蔽对应的IRi 禁止它的输入信号产生中断输出信号INT Mi 0则允许对应的IRi的中断输入信号产生中断输出信号INT 向CPU申请中断 7 4 2中断屏蔽与中断结束的处理 80 x86PC机为了系统的工作稳定 在初始化8259A即送完ICW后 写入了中断屏蔽操作控制字OCW1 将它自身没有用的8259A的中断输入线全部屏蔽 因此在中断前后要修改80 x86PC机系统设置的中断屏蔽字 中断后应恢复系统原来设置的中断屏蔽字 修改和恢复的方法是用奇地址读取中断屏蔽寄存器IMR的内容 将所用的中断输入线IRi的对应位Mi置0 修改 或者置 恢复 后 再用奇地址写入中断屏蔽寄存器 修改和恢复时 不要改变IMR其他位的状态 故只能用与操作置0 用或操作置1 例7 4时钟程序 该程序将IMBPCXT机转变成一台式时钟 显示格式为HH MM SS 启动程序后 提示用户输入当前的时间 键入的格式与显示格式相同 即时 分 秒三者间要用 分隔 本程序使用系统的时钟18 2Hz 即8253计数器0的输出 因此每秒钟会发生18次IRQ0中断 中断类型码为8 修改中断向量表 使该中断服务程序TIMER得到该类中断的控制权 该中断服务程序使用一软件计数器 其计数值保存在字节变量COUNT中 其初值为18 每中断一次其值减1 当该变量的值减为0时 再将其置为18 并调整一次时钟 7 4 3中断服务程序设计举例 其程序如下 stacksegmentstack stack dw32dup 0 stackendsdatasegmentCOUNTDB18ECTDB ENTERCURRENTTIEM BUFFERDB9 0TENHODB 0 HOURDB 0 TENMINDB 0 MINUTEDB 0 TENSECDW 0 SECONDDB 0 0DH STOREDW0 0dataendscodesegmentmainprocfarassumecs code ds data ss stackpushdsmovax 0pushaxMOVES AXmovax datamovds ax MOVDI OFFSETSTORE 保存系统时钟的中断服务程序MOVAX ES 20H 入口地址MOV DI AXINCDIINCDIMOVAX ES 22HMOV DI AXMOVDX OFFSETECT 显示 ENTERCURRENTTIME MOVAH 9INT21HMOVDX OFFSETBUFFER 键入当前时间MOVAH 0AHINT21HMOVBH 70H 清屏 显示器的软中断服务程序 MOVCH 0MOVCL 0MOVDH 24MOVDL 79MOVAL 0MOVAH 7INT10HMOVDI 20H 中断程序入口地址送中断向量表MOVAX OFFSETTIMERXMOV DI AXINCDIINCDI MOVAX CSMOV DI AXFOREVE MOVAH 2 置光标位置 显示器的软中断服务程序 MOVBH 0MOVDH 12MOVDL 24INT10HMOVAH 9 显示时 分 秒MOVDX OFFSETTENHOINT21HMOVAL SECOND 等待1秒钟HERE CMPAL SECONDJEHEREMOVAH 0BH 检查键盘 若有键入则返回INT21HINCALJNZFOREVEMOVDI 20H 恢复系统时钟的中断向量表MOVAX STOREMOV DI AXINCDIINCDIMOVAX STORE 2MOV DI AXretmainendp TIMERXPROCFARDECCOUNT 软件计数器减1JNZTIMER 不到1秒 退出中断MOVCOUNT 18 已到1秒 恢复软件计数器INCSECOND 秒加1CMPSECOND 9 十秒位是否增1 JLETIMER 否 退出中断MOVSECOND 0 秒位置0INCTENSEC 十秒位加1CMPTENSEC 6 满1分否 JLTIMER 否 退回中断MOVTENSEC 0 满 分加1INCMINUTECMPMINUTE 9 JLETIMERMOVMINUTE 0 INCTENMINCMPTENMIN 6 是否满1小时 JLTIMERMOVTENMIN 0 满 小时加1INCHOUR CMPHOUR 9 JAADJHOCMPHOUR 3 JNZTIMERCMPTENHO 1 JNZTIMERMOVHOUR 1 MOVTENHO 0 JMPTIMERADJHO INCTENHOMOVHOUR 0 TIMER MOVAL 20H 中断结束命令OUT20H ALIRETTIMERXENDPcodeendsendmain 例7 5由PCXT机外部产生中断请求的简单中断程序 系统将8259A的中断输入线IR0 IR7初始化为由低变高的边沿触发 通过一开关 单稳 防抖 将中断请求信号接到PCXT总线的引脚B4 即IRQ2上 该开关先输出低电平 运行程序显示提示信息 WAITINTERRUPT 后再将开关输出高电平 使IRQ2的电平由低变高 于是向8259A的中断输入线发出了中断请求信号 成功后再将开关返回到低电平 该程序可以用到任何可以产生中断请求信号的外设接口的电路上 如前所述 PCXT机已对8259A进行了初始化操作 故只需进行操作命令字的设定 8259A的端口地址为20H和21H 要使用的命令字有屏蔽字OCW1和中断结束命令字OCW2 程序中用JMP 指令来等待中断 若程序中不改变屏蔽字开放IRQ2中断 则扳动开关后 程序总处于等待状态 不进入中断 因为JMP 指令执行之后才响应中断 所以响应中断时进入堆栈保护的断点地址仍是JMP 指令的地址 故中断返回前应修改返回地址 以便返回后跳过该指令 执行JMP 指令的下一条指令 JMP 指令是近跳转的2字节指令 指令的机器码为EBFEH 故修改返址是将返回地址加2 其程序如下 stacksegmentstack stack dw32dup 0 stackendsdatasegmentDA1DB WAITINTERRUPT 0AH 0DH DA2DB INTERRUPTPROCESSING 0AH 0DH DA3DB PROGRAMTERMINATEDNORMALLY 0AH 0D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一本大学学生管理办法
- 自媒体如何管理办法
- 仓储配送公司管理办法
- 装备经费使用管理办法
- 财务列支规范管理办法
- Unit 5 Here and Now 第五课时Section B 2a-2b 说课稿 2024-2025学年人教版(2024)七年级英语下册
- 市场仓库租赁合同3篇
- 2025年医院消防安全培训试题及答案
- (合同范本)债权债务转让协议(三方)4篇
- 2025年外贸业务员招聘考试模拟试题与答案详解集合
- 2024年医院肠胃内镜科带教计划
- 能源管理系统平台软件数据库设计说明书
- JCT908-2013 人造石的标准
- 住院病历质量考核评分表
- 充电桩工程施工组织设计施工组织
- 执业兽医机构聘用证明或服务协议
- 身体尺(课件)二年级上册数学人教版
- 欠款转为借款合同
- 公路隧道建设施工技术规范学习考试题库(400道)
- 严重创伤重症监护
- 人教版六年级语文上册生字表(带拼音词组)-2023修改整理
评论
0/150
提交评论