www.pudn.com > Demo_asm_80x86.rar > Timer2.asm


;****************************************************** 
;* 文件名:Timer2.asm 
;* 创建日期:2001.7.4 
;* 作者:陈文尧 
;* 功能:利用内存驻留显示时钟 
;* 备注:本程序是Timer.asm的另一个版本。由于她在需要驻留 
;*      的代码中调用了库函数,又因为无法事先知道库函数的 
;*      位置,所以不能确定代码驻留到哪个具体的标号为止, 
;*      在这里本系统提供TSR2这个宏来实现。TSR2宏只要在 
;*      <汇编专家>中选了"使用未来汇编库函数"就会加上去。 
;*      TSR2有一个可选的参数,如果没有参数,则如果是EXE 
;*      驻留1010h节COM驻留1000h节,如果有参数,则非发布 
;*      模式同上面一样否则驻留为参数的值加上PSP的长度。 
;*      我建议先把程序编译看COM文件的大小再决定驻留多少 
;****************************************************** 
include system.inc 
 
;****************************************************** 
;* 以下代码由汇编专家产生,不要随便修改 
;****************************************************** 
.CODE 
	ifdef __COM__ 
		org	100h 
	endif 
@@Start: 
;------------------------------------------------------ 
; 初始化数据段 
;------------------------------------------------------ 
	InitDS	cs 
;------------------------------------------------------ 
; 调用主函数 
;------------------------------------------------------ 
	call	main 
;------------------------------------------------------ 
; 正常退出,并驻留内存 
;------------------------------------------------------ 
	TSR2	182d ;本程序的.com文件长182Byte 
 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
;+ 从这里开始到@@EndTSR,你可以加入需要驻留的代码和数据 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Time2Asc proc near 
         mov		ah,al 
         and		ah,0fh 
         shr		al,04h 
         add		ax,3030h 
         ret 
Time2Asc endp 
 
GetTime macro 
        mov		ah,02h 
        int		1ah 
        mov		al,cl 
        call	Time2Asc 
        mov		word ptr ds:MMM,ax 
        mov		al,ch 
        call	Time2Asc 
        mov		word ptr ds:HHH,ax 
        mov		al,dh 
        call	Time2Asc 
        mov		word ptr ds:SSS,ax 
        endm 
 
new1ch proc near 
       pusha 
       push		ds 
       push		es 
       ; 
       MovSeg	ds,cs 
       GetTime 
       LibCall	PutStringDirect,,72d, 
       ; 
       pop		es 
       pop		ds 
       popa 
       jmp		dword ptr cs:[old1ch] 
new1ch endp 
 
old1ch	dd	? 
HHH		db	?,?,':' 
MMM		db	?,?,':' 
SSS		db	?,?,00h 
 
@@EndTSR: 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
;+ 主函数,加入驻留前需要做的代码 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
main	proc 
	LibCall		GetVect,1ch 
	mov			word ptr old1ch,ax 
	mov			word ptr old1ch+02h,dx 
	LibCall		SetVect,1ch, 
	; 
	ret 
main	endp 
 
;****************************************************** 
;* 标志程序结束并指定程序入口 
;****************************************************** 
	end	@@Start