关于时间中断的问题

王朝知道·作者佚名  2009-04-15
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

我写一个时间中断的程序,下面是初始化部分.运行到mov ax,251ch,int 21h偏会出错.在windowsxp下,计算机就提示无效指令.在实模式dos下就死机.请各位帮忙看一下.begin: push cspop dsmov ax,351chint 21hmov old_int,bxmov old_int,esmov dx,offset new08hmov ax,251chint 21hmov dx,offset begin+15+200mov cl,4shr dx,cladd dx,10hmov al,0mov ah,31hint 21hcode endsend begin完整程序:.386stack segment use16 stackdb 200 dup(0)stack endscode segment use16assume cs:code,ds:code,ss:stackcount db 18hour db ?,?,':'min db ?,?,':'sec db ?,?buf_len=$-hourcursor dw ?old_int dw ?,?new08h proc farpushfcall dword ptr cs:old_intdec cs:countjz disppopfiretdisp: mov cs:count,18stipushapush dspush esmov ax,csmov ds,axmov es,axcall get_timemov bh,0mov ah,3int 10hmov cursor,dxmov bp,offset hourmov bh,0mov dh,0mov dl,80-buf_lenmov bl,07hmov cx,buf_lenmov al,0mov ah,13hint 10hmov bh,0mov dx,cursormov ah,2int 10hpop espop dspopapopfiretnew08h endpget_time procmov al,4out 70h,aljmp $+2in al,71hmov ah,aland al,0fhshr ah,4add ax,3030hxchg ah,almov word ptr hour,axmov al,2out 70h,aljmp $+2in al,71hmov ah,aland al,0fhshr ah,4add ax,3030hxchg ah,almov word ptr min,axmov al,0out 70h,aljmp $+2in al,71hmov ah,aland al,0fhshr ah,4add ax,3030hxchg ah,almov word ptr sec,axretget_time endpbegin: push cspop dsmov ax,351chint 21hmov old_int,bxmov old_int,esmov dx,offset new08hmov ax,251chint 21hmov dx,offset begin+15+200mov cl,4shr dx,cladd dx,10hmov al,0mov ah,31hint 21hcode endsend begin

參考答案:

你oldint里面本来应该存放的是旧的中断入口地址和段首址但是mov old_int,bx

mov old_int,es

你这样一写 oldint里面就只有es段地址了,建议用位操作改一下

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航