快速业务通道

Windows中断编程

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
,即中断描述符表IDT。该表被用来保存中断服务例程的线性地址,它们是真正的24位或32位地址,没有段:偏移值结构。中断描述器表最多可含有256个例

程说明,详细说明请见[3]。

②当中断或异常发生时,处理过程与实模式类丁当前的CS; IP值和标志寄存器值被存储。保存的内容还包括CPU其他内部寄存器的值,以及目前正在被执行的任务的有关信息(若必须发生任务切换的话)。CPU设法获取中断向量后,以它为索引值查找IDT中的服务例程远地址,接着将控制转移到该处的服务例程。这是与实模式转移到IVT的不同所在。保护模式使用IDTR寄存器分配和定位内存中的IDT中断描述符表。

IDT在内存中是可移动的,与IVT固定在内存中刚好相反。 IDT中断描述符表在 Windows中起决定性的作用。理解了windows保护模式的中断机制。有助于我们理解中断服务程序的设计,它的关键就在于如何将服务例程的地址放入IDT中断描述符表中。当中断发生时,如何将断点地址及CPU各寄存器值保护起来,中断结束时,如何将保护的值恢复。 windows系统本身并不提供实现上述功能的API,而DOS保护模式接口DPMI正具备了上述的功能。

下面我们首先介绍DPMI接口,然后基于它实现Windows下中断服务程序的设计。

四、DOS保护模式接口

DMPI Windows除了标准服务外,还支持一组特殊的DOS服务,称为DOS保护模式接口 DPMI,由一些INT2FH和INT31H服务组成。它使应用程序能够访问 PC系列计算机的扩充内存,同时维护系统的保护功能。 DPMI通过软件中断31h来定义了一个新的接口,使得保护模式的应用程序能够用它作分配内存,修改描述符以及调用实模式软件等工作。

Windows为应用程序提供 DPMI服务。即Windows是DPMI的宿主(host),应用程序是DPMI的客户(client),可通过INT31H调用得到DPMI服务。INT 31H本身提供多功能。其中它的中断管理服务允许保护模式用于拦截实模式中断,并且挂住处理器异常。有些服务能够和 DPMI宿主合作,以维护应用程序的虚拟中断标志。

可以用INT31H来挂住保护模式中断向量,以中断方式处理外部实时事件。利用 INT 21H,功能0205H:设置保护模式中断向量,将特定中断的保护模式处理程序的地址置入中断向量里。调用方式:

AX=0205H,BL=中断号,CX:(E)DX=中断处理程序选择符:偏移值。返回:执行成功CF=清零,执行失败CF,置位。

挂住/解挂中断向量的时机很重要。主窗口第一次被创建时会传送它WM—CREATE消息,这时是挂住中断向量的最好时机。退出时需解挂向量,否则Windows可能崩溃。上窗口接收到WM_DESTROY之后进行解挂工作,是最适合的。解挂向量可先用INT35H,0204H功能将老的中断向量保存,退出时用INT35H,0205H恢复。

五、编程实现

有了DPMI的支持,我们就可以很方便地处理数据采集、串行通信等工业过程中的实时事件。下面以Windows3.1平台下中断方式实现的串行通信为例,说明中断程序的编制和实现。为便于参考,给出了详细的代码。开发平台BC3.1/BC4.5,其本身支持0.9版的DPMI,无需运行其它支持DPMI的软件。编程语言C,可与C++混合编译。

初始化COM1,9600波特率,每字符8bits,1个停止位,中断接收,查询发送。

//windows asy COmmunica60n
//by Li Xiumi98
//last modified on June25,1996
#include<windows.h>
#include<dos.h>
void interrupt far DataReceive() ;
void interrupt far( * old_vector)();
unsigned char dataCom_r[1024],datacom_s[1024]:
int inflag=0 ;
unsigned int s8259;
int InitCom1()
{
   s8259=inportb(0x21);
   outportb(0x21,s8259&0xe8);
   outportb(0x3fb,0x83);
   outportb(0x3f8,0x0c);
   outportb(0x3f9,0x00);
   outportb(0x3fb,0x03);
   outportb(0x3fc,0x08);
   outportb(

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号