大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  Pascal语言>>算法与技巧>>设置中断子程序         本站全文搜索: 友情提示:

设置中断子程序
http://www.mydrs.org  9/2/2001  大榕树


·设置中断子程序

  设置自己的中断子程序,可以利用中断实现拦截Ctrl+Break、自动计时、实时响应键盘操作等诸多功能,在编写好的游戏和软件时必不可少。

  一般在检查或设置任何中断向量时,总是避免直接使用中断向量的绝对地址,而是使用DOS功能调用(21H)存取中断向量。

  DOS单元有两个过程分别执行设置中断向量和获取中断向量:SetIntVec和GetIntVec。其定义如下:
  procedure SetIntVec(IntNo:Byte;Vector:Pointer);
  procedure GetIntVec(IntNo:Byte;var Vector:Pointer);
  这两个过程都是使用DOS功能调用(21H)存取中断向量。

  如果新的中断功能只供自己使用,或用自己编写的中断处理程序代替系统中的中断处理功能时,要注意保存原中断向量,在设置自己的中断向量时,应先保存原中断向量再设置新的中断向量,再程序结束之前恢复原中断向量。

·编写自己的中断子程序

  编写自己的中断子程序是系统级程序设计员常用的技术之一。编写这类程序,常常需要很复杂的技术,并且要很细心,一般都用汇编语言或C语言来实现。然而,Turbo Pascal提供了实现这种技术的简便方法。

  中断过程可用Interrupt指令来声明:

procedure IntHandler(Flags,Cs,Ip,Ax,Bx,Cx,Dx,Si,Di,Ds,Es,Bp:word);interrupt;
begin
 ...
end;

  Turbo Pascal在中断过程的入口处自动保存所有寄存器并初始化DS寄存器。所有寄存器都作为参数传递,因而在过程中可以使用并修改其值。不一定要列出上面所有寄存器参数,但对参数表有几个规定:
  1.不能声明其它的参数;
  2.可以不声明任何参数;
  3.若前一个参数没有省略,则不能省略后一个参数。

  例如:
  procedure IntHandler;           {正确}
  procedure IntHandler(Si,Di,Ds,Es,Bp:Word);{正确}
  procedure IntHandler(Si,Es,Bp:Word);   {错误}

  最后一例的错误在于省略了Di和Ds,而没有省略Si。虽然编译程序不会报告此类错误,但你自己应负责参数顺序的正确性,否则会发生意外的错误。

  注意,Turbo Pascal并没有自动插入开中断指令----STI,因而不会产生进一步的中断。需要时可以用inline语句插入一条STI指令。

  中断过程的出口码将恢复寄存器并执行中断返回指令。中断过程可以修改寄存器参数,中断返回时,会导致相应寄存器的修改。

  值得注意的是,若是编写硬件中断处理程序,则不能使用Turbo Pascal的输入输出或动态内存分配子程序,因为它们是不可重入的。另外,由于DOS也是不可重入的,因而也不能使用DOS功能调用。

作 者:陈世熹
来 源:陈世熹的Pascal
共有2434位读者阅读过此文

  • 上篇文章获取DOS版本号
  • 下篇文章简单的Ctrl-Break控制子程序

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8306]
    2. 七类高中生具有保送资格 [5910]
    3. NOI2006获奖选手名单 [4955]
    4. 关于举办NOIP2006模拟赛的通告 [4106]
    5. Turbo Pascal各语句运行速... [3594]
    6. Turbo王者归来新Delphi免费... [3181]
    7. IOI2006我国4名选手全部获得金... [2945]
    8. 关于APIO2007与IOI2007... [2763]
    9. noip倒计时 by 枯叶蝴蝶 [2683]
    10. 朱泽园:思想上的金牌更重要 [2168]
    简单的按键检测子程序
    简单的时钟控制子程序
    简单的Ctrl-Break控制子程序
    设置中断子程序
    调用中断
    中断向量表
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号