CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

谁有拦截时钟中断的例子?

楼主metero(天不赋我唯有勤)2002-09-07 00:05:11 在 其他开发语言 / 汇编语言 提问

我想做一个时钟中断的程序,但不知道怎么下手,你们说说看? 问题点数:100、回复次数:5Top

1 楼Areslee(懒虫易水)回复于 2002-09-07 10:10:38 得分 5

调用INT 21H/AH=25H接管中断。  
   
  在中断服务程序中注意保护用到的寄存器,然后在处理完中断后调用原来的系统中断服务。Top

2 楼vBin(彬)回复于 2002-09-07 11:46:55 得分 5

我的网站的“源创作品“中有一个名为sample_DOS的,就是这个例子。  
  站址:www.vbin.org  
   
  or    
              vbin.51.netTop

3 楼Purpleendurer(编程—>任是无情也动人^_^)回复于 2002-09-08 20:52:43 得分 40

正好有个屏幕保护程序源程序(在指定时间内未按钮则黑屏,按任意键恢复),再次运行将从内存中退出。贴上来仅供参考!  
   
  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  
  ;Name           :   SafeScr.asm  
  ;Function   :   Disapears   the   screen   when   user   doesn't   press   key  
  ;Author       :   Purple   Endurer  
  ;Reference:   Computer   paper   1996U243,   Software   1993   P114  
  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  
   
  cseg         segment  
                  assume   cs:   cseg,     ds:   cseg  
                  org   100h  
  start:     jmp   @Init  
                  ;====================  
                  Old1cAddr   label   dword  
                  Old1cOff     dw         ?  
                  Old1cSeg     dw         ?  
                  Old09Addr   label   dword  
                  Old09Off     dw         ?  
                  Old09Seg     dw         ?  
                  mcb_evb       dw         ?  
                  mcb_psp       dw         ?  
                  show             dw         1  
                  count           dw         0  
                  VarLen         equ       $   -   Old1cAddr  
                  time             equ       1000  
   
  ;///////////////////////////  
    new1ch   proc   far  
  ;///////////////////////////  
                  ;sti  
                  push   ax  
                  push   bx  
                  inc   cs:[count]  
                  ;mov   ax,   cs:   [time]  
                  cmp   cs:[count],   time  
                  jne   @New1chEnd  
                  mov   bl,   36h  
                  mov   ax,   1201h  
                  int   10h  
                  mov   cs:[count],   0  
                  mov   cs:[show],     0  
  @New1chEnd:  
                  pop   bx  
                  pop   ax  
                  jmp   cs:Old1cAddr  
  new1ch   endp  
   
  ;///////////////////////////  
  new09h   proc   far  
                  ;sti  
                  push   ax  
                  push   bx  
                  cmp   cs:[show],   1h  
                  je   @New09hEnd  
                  mov   cs:[show],   0h  
                  mov   bl,   36h  
                  mov   ax,   1200h  
                  int   10h  
  @New09hEnd:  
                  mov   cs:[count],   0  
                  pop   bx  
                  pop   ax  
                  jmp   cs:Old09Addr  
  new09h   endp  
  ;///////////////////////////  
   
  @Init:  
                  mov   ax,   3509h  
                  int   21h  
                  cmp   bx,   offset   new09h  
                  jnz   @install       ;No   install  
   
                  mov     dx,   offset   strMsgUninstall  
                  mov     ah,   09h  
                  int     21h  
   
                  mov     bx,   1ch   *   04h  
                  xor     ax,   ax  
                  mov     ds,   ax  
                  mov     ax,   es:[Old1cOff]  
                  mov     ds:[bx],   ax  
                  mov     ax,   es:[Old1cSeg]  
                  mov     ds:[bx+2],   ax  
   
                  mov     bx,   09h   *   04h  
                  mov     ax,   es:[Old09Off]  
                  mov     ds:[bx],   ax                     ;ds   =   0  
                  mov     ax,   es:[Old09Seg]  
                  mov     ds:[bx+2],   ax  
   
                  mov     bx,   1  
                  mov     ax,   es:[mcb_evb]           ;Release   evirenment   parameter   block  
                  mov     ds,   ax  
                  mov     word   ptr   ds:[bx],   0  
   
                  mov     ax,   es:[mcb_psp]           ;Release   TSR  
                  mov     ds,   ax  
                  mov     word   ptr   ds:[bx],   0  
                  mov     ax,   4c00h  
                  int     21h  
   
  @install:  
                  ;mov     ax,   3509h  
                  ;int     21h  
                  mov     Old09Seg,   es  
                  mov     Old09Off,   bx  
   
                  mov     ax,   cs  
                  dec     ax  
                  mov     [mcb_psp],   ax             ;mov     cs:[mcb_psp],   ax  
                  mov     bx,   2ch  
                  mov     ax,   [bx]                       ;mov     ax,   cs:[bx]  
                  dec     ax  
                  mov     [mcb_evb],   ax   ;Store   the   address   of   evirenment   parameter   block  
   
                    mov     dx,   offset   new09h  
                  mov     ax,   2509h  
                  int     21h  
   
                  mov     ax,   351ch  
                  int     21h  
                  mov     Old1cSeg,   es  
                  mov     Old1cOff,   bx  
                  mov     dx,   offset   new1ch  
                  mov     ax,   251ch  
                  int     21h  
   
                  mov     dx,   offset   strMsgInstall  
                  mov     ah,   09h  
                  int     21h  
   
                  mov   dx,   offset   @Init  
                  add   dx,   VarLen   +   2  
                  mov   cl,   04h  
                  shr   dx,   cl  
                  mov   ax,   3100h  
                  int   21h  
                  ;====================  
                  strMsgInstall       db   07h,   "Screensafer   installed!$"  
                  strMsgUninstall   db   07h,   "Screensafer   uninstalled!$"  
  cseg   ends  
                  end   start  
   
  Top

4 楼dsangvei(十年一剑)回复于 2002-09-10 09:25:49 得分 50

我这里有一个在DOS下仿WIN98时钟显示的程序,你可以看一下。  
   
  .model   tiny  
  .code  
  start:  
          jmp   install  
          count   db   0  
          add8     dd   ?  
          flag     db   0  
          hour       db   0  
          minute   db   0  
          second   db   0  
          free       db   0  
   
  vec8   proc   far  
          cli  
          jmp   next  
          inc   cs:count  
          cmp   cs:count,18  
          je     disp  
          jmp   next  
  disp:  
          mov     cs:count,0  
  ;         inc     free  
  ;         cmp     free,5  
  ;       change   the   time  
   
          cmp   cs:second,59  
   
          je     inc_minute  
          inc   cs:second     ;second   ++  
          jmp   show  
   
  inc_minute:  
          mov   cs:second,0  
          cmp   cs:minute,59  
          je     inc_hour  
          inc   cs:minute  
          jmp   show  
   
  inc_hour:  
          ;cmp   hour,23  
          inc   cs:hour  
  show:  
   
   
          push   ax  
          push   ds  
          push   bx  
          push   cx  
   
          mov   ax,0b800h  
          mov   ds,ax  
          mov   bx,3980     ;video   buffer  
          mov   cs:carry,0  
   
          mov   ah,0  
          mov   al,cs:hour  
          mov   cl,10  
          div   cl  
          add   al,'0'   ;al   =   ten  
          mov   byte   ptr   [bx       ],al  
          add   ah,'0'  
          mov   byte   ptr   [bx+2   ],ah   ;   hour  
          mov   byte   ptr   [bx+4   ],':'  
   
          mov   al,cs:minute  
          mov   ah,0  
          mov   cl,10  
          div   cl  
          add   al,'0'  
          mov   byte   ptr   [bx+6   ],al  
          add   ah,'0'  
          mov   byte   ptr   [bx+8   ],ah   ;   minute  
          mov   byte   ptr   [bx+10],':'  
   
          mov   al,cs:second  
          mov   ah,0  
          mov   cl,10  
          div   cl  
          add   al,'0'  
          mov   byte   ptr   [bx+12   ],al  
          add   ah,'0'  
          mov   byte   ptr   [bx+14   ],ah   ;   second  
   
          ;cmp   cs:flag,0  
          ;je     vec81  
          ;jmp   cs:add8  
          pop   cx  
          pop   bx  
          pop   ds  
          pop   ax  
  next:  
          sti  
          jmp   cs:add8  
          iret  
  ;   vec81:  
  vec8   endp  
  install:   ;resident   in   mem  
          mov   ah,2ch   ;get   system   time  
          int   21h  
          mov   cs:hour,ch  
          mov   cs:minute,cl  
          mov   cs:second,dh  
   
          mov   ax,cs  
          mov   ds,ax  
          mov   ax,351Ch     ;get   vector   8   and   save  
          int   21h  
          mov   word   ptr   add8,bx  
          mov   word   ptr   add8+2,es  
   
          mov   ax,251Ch  
          mov   dx,offset   vec8     ;set   new   vector  
          int   21h  
   
          mov   dx,offset   install  
          mov   cl,4  
          shr   dx,cl  
          inc   dx  
          mov   ax,3100h   ;exit   and   resident  
          int   21h  
  end   start  
  Top

5 楼metero(天不赋我唯有勤)回复于 2002-09-10 19:47:28 得分 0

对vBin(彬)、Purpleendurer(Purplenendurer)   、   dsangvei(#include“C++”)   表示非常感谢!Top

相关问题

  • 关于时钟中断
  • 时钟中断问题
  • Dos的时钟中断
  • 拦截中断,大侠请进,200分!
  • 请问什么叫时钟中断?
  • 急!请问如何用C实现时钟中断
  • 关于单片机时钟中断地时间计算问题?
  • 请教c语言中的时钟中断技术,不懂啊。。。
  • 继续提问有关时钟中断的问题
  • 谁提供几个运用钩子拦截消息的例子

关键词

  • 中断
  • 时钟
  • 例子
  • vbin
  • 调用
  • 程序
  • 服务

得分解答快速导航

  • 帖主:metero
  • Areslee
  • vBin
  • Purpleendurer
  • dsangvei

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo