c语言中断处理参考.pdfVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c 语言中断处理 系统级 C 语言程序设计(中断原理简介) 摘要:本文主要介绍 C 语言中中断服务程序的编写、安装和使用。由于硬中断服务程序的编写涉及到硬 件端口读写操作,使得用户直接和硬件打交道,在程序设计过程中要用到的数据(如硬件端口地址等)比 较多,这就使程序员和计算机的硬件设备间缺少一种“缓冲”的作用,况且,用汇编语言来直接对硬件编 程要方便得多。 本文仅对软中断程序的编写作个介绍。 关键词:软中断、中断向量、中断向量表、 TSR 内存驻留、 DOS重入、中断请求、段地址、偏移量、寄存 器、 BIOS、DOS、setvect() 、getvect() 、keep () 、disable() 、enable () 、geninterrupt () 、int86 () 、 interrupt 对于一般的 C 语言爱好者而言,就如何在 C 中使用中断例程这一问题应该已经非常熟悉,例如,我们可 以通过 int86 ( ) 函数调用 13H号中断直接对磁盘物理扇区进行操作, 也可以通过 INT86 ( ) 函数 调用 33H 号中断在屏幕上显示鼠标光标等。其实, 13H 号也好, 33H 号也好,它们只不过就是一些函数,这 些函数的参数通过 CPU的寄存器传递。 中 断号也只不过是间接地指向函数体的起始内存单元, 说它是间接 的,也就是说,函数的起始段地址和偏移量是由中断号通过一种方法算得的(具体如何操作,下面会 作解 释)。如此一来,程序员不必要用太多的时间去写操作硬件的程序了,只要在自己的程序中设置好参数, 再调用 BIOS 或 DOS提供的中断服务程序就可以 了,大大减小了程序开发难度,缩短了程序开发周期。那 么中断既然是函数,就可以由用户任意的调用、由用户任意地编写。 计算机内存的前 1024 个字节(偏移量 00000H 到 003FFH)保存着 256 个中断向量,每个中断向量占 4 个字节,前两个字节保存着中断服务程序的入 口地址偏移量,后两个字节保存着中断程序的入口段地址, 使用时, 只要将它们分别调入寄存器 IP 及 CS中,就可以转入中断服务程序实现中断调用。 每当中断发 生 时,CPU将中断号乘以 4 ,在中断向量表中得到该中断向量地址,进而获得 IP 及 CS值,从而转到中断服务 程序的入口地址, 调用中断。 这就是中断服务程序 通过中断号调用的基本过程。 在计算机启动的时候, BIOS 将基本的中断填入中断向量表, 当 DOS得到系统控制权后, 它又要将一些中断向量填入表中, 还要修 改一 部分 BIOS 的中断向量。 有一部分中断向量是系统为用户保留的, 如 60H 到 67H 号中断, 用户可以将自己的 中断服务程序写入这些中断向量中。不仅如 此,用户还可以自己更改和完善系统已有的中断向量。 在 C语言中,提供了一种新的函数类型 interrupt ,专门用来定义中断服务程序,比如我们可以写如下 的中断服务程序: /* 例 1:中断服务程序 */ void interrupt int60() { puts("This is an example"); } 该中断的功能就是显示一个字符串,为什么不用 printf ( ) 函数呢?这就牵涉到 DOS的重入问题, 后面将作一些介绍。 一个简单的中断服务程序写好了,如何把它的函数入口地址填写到中断向量表中,以便在产生 中断的时候能转入中断服务程序去执行呢?这里要用到 setvect ( ) 和 getvect ( ) 函数。 setvect ( )

文档评论(0)

cy65918457 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档