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


;****************************************************** 
;* 文件名:Timer.asm 
;* 创建日期:2001.7.4 
;* 作者:陈文尧 
;* 功能:利用内存驻留显示时钟 
;****************************************************** 
include system.inc 
 
;****************************************************** 
;* 以下代码由汇编专家产生,不要随便修改 
;****************************************************** 
.CODE 
	ifdef __COM__ 
		org	100h 
	endif 
@@Start: 
;------------------------------------------------------ 
; 初始化数据段 
;------------------------------------------------------ 
	InitDS	cs 
;------------------------------------------------------ 
; 调用主函数 
;------------------------------------------------------ 
	call	main 
;------------------------------------------------------ 
; 正常退出,并驻留内存 
;------------------------------------------------------ 
	TSR	@@EndTSR 
 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
;+ 从这里开始到@@EndTSR,你可以加入需要驻留的代码和数据 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Time2Asc proc near 
         out		70h,al 
         in			al,71h 
         mov		ah,al 
         and		ah,0fh 
         shr		al,04h 
         add		ax,3030h 
         ret 
Time2Asc endp 
 
;从CMOS中读取系统时间 
GetTime macro 
        mov		al,00h 
        call	Time2Asc 
        mov		word ptr SSS,ax 
        mov		al,02h 
        call	Time2Asc 
        mov		word ptr MMM,ax 
        mov		al,04h 
        call	Time2Asc 
        mov		word ptr HHH,ax 
        endm 
 
;采用直接写屏方式显示时间        
PutTime macro 
        local	@Begin   
        MovSeg	es,0b800h 
        mov		ah,BC_BLUE or CR_YELLOW 
        mov		di,(80d-BUFFER_LEN) shl 01h 
        mov		si,offset HHH 
        mov		cl,BUFFER_LEN 
        cld 
@Begin: 
        lodsb 
        stosw 
        dec		cl 
        ja		@Begin 
        endm 
 
new1ch proc 
       pusha 
       push		ds 
       push		es 
       ; 
       MovSeg	ds,cs 
       GetTime 
       PutTime 
       ; 
       pop		es 
       pop		ds 
       popa  
       jmp		dword ptr cs:[old1ch] 
new1ch endp 
 
old1ch	dd	? 
HHH		db	?,?,':' 
MMM		db	?,?,':' 
SSS		db	?,? 
BUFFER_LEN	=	$	-	offset HHH 
 
@@EndTSR: 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
;+ 主函数,加入驻留前需要做的代码 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
main	proc 
	mov			ax,351ch 
	int			21h 
	mov			word ptr old1ch,bx 
	mov			ax,es 
	mov			word ptr old1ch+02h,ax 
	mov			ax,251ch 
	mov			dx,offset new1ch 
	int			21h 
	; 
	ret 
main	endp 
 
;****************************************************** 
;* 标志程序结束并指定程序入口 
;****************************************************** 
	end	@@Start