自编中断服务程序举例
自编中断服务程序举例 Q! N" L b! n# s. T# B4 _6 |
这里先举一个完整的自己能上机练习的中断服务程序例子。在第六章中介绍完可编程计数器/定时器8253后再举一例(在Pc系列机中加入一个用户中断源——可编程定时中断),说明在PC系列机中加入一个用户中断源应做的工作。 ; ~6 m U& S8 p& t/ d7 ]
例 利用1CH软中断作定时处理——每次进入1CH中断时显示一个“*”,18次后显示一个字符串“second”(秒)。
" F* H" [$ r& q+ T 关于1CH软中断,前面已经介绍,是留给用户进行定时处理的“软接口”。在软时钟中断(中断类型号为08H)处理过程中,要调用一次INT 1CH软中断。系统本身(指DOS)在1cH中断服务程序中仅安排了一条中断返回指令,即什么也没有做,直接返回。所以,用户可重新编写1CH的中断服务程序,在其中加入自己所需的定时处理。下面是用Turbo C编写的1CH中断服务程序以及对1CH中断进行设置的主程序的清单。编译、连接,形成可执行文件后便可运行(DOS环境下)。 . M% [4 a% m7 p) j
#include<dos.h>
, E/ a7 `2 }& B union REGS in,out;
5 Y( v# {2 `3 q" C( I; F& o int U=0; # F: b/ u: W- m) Y
char fg=0;
- u0 w3 e0 t$ H# [0 E% K! S6 d# a; b void interrupt(*old intlc)(void); /*定义old_intlc为中断函数指针*/ + s, q2 S' F4 V: O# N
void interrupt new_intle() /*自编的1CH中断服务程序*/ : A: z( v. U% Y5 m! Y& l
{in.h.ah=OxOe; /*调用BIOS功能显示字符'*'*/
, f) R& b' D3 x" R" z2 M+ B9 P in.h.al='*':
2 q3 n6 ]. r' c7 x# ^' u in.h.bh=0;
5 f: ~. N0 _ \& O0 ]9 Y2 n, | int86(0x10,&;amp;in,&;amp;out); ' s5 e( D, L7 M& ]5 Y( P. N
n ;if(n>=18){n=0;fg=1;} : r9 ~9 q4 K' ^9 G4 |/ e4 m
}
点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹