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


;****************************************************** 
;* 文件名:Timer1.asm 
;* 创建日期:2001.7.4 
;* 作者:陈文尧 
;* 功能:利用内存驻留显示时钟 
;* 备注:这是Timer.asm的优化版本 
;****************************************************** 
include system.inc 
 
;****************************************************** 
;* 以下代码由汇编专家产生,不要随便修改 
;****************************************************** 
.CODE 
	ifdef __COM__ 
		org	100h 
	endif 
@@Start: 
;------------------------------------------------------ 
; 初始化数据段 
;------------------------------------------------------ 
	InitDS	cs 
;------------------------------------------------------ 
; 调用主函数 
;------------------------------------------------------ 
	call	main 
;------------------------------------------------------ 
; 正常退出,并驻留内存 
;------------------------------------------------------ 
	TSR	@@EndTSR 
 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
;+ 从这里开始到@@EndTSR,你可以加入需要驻留的代码和数据 
;++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
new1ch: 
       pusha 
       push		ds 
       push		es 
       ; 
       MovSeg	ds,cs 
       MovSeg	es,0b800h 
       mov		ah,BC_BLUE or CR_YELLOW 
       mov		di,(80d-08d) shl 01h 
       cld 
       mov		al,04h 
       call		Time2Asc 
       mov		al,':' 
       stosw 
       mov		al,02h 
       call		Time2Asc 
       mov		al,':' 
       stosw 
       mov		al,00h 
       call		Time2Asc 
       ; 
       pop		es 
       pop		ds 
       popa 
       ; 
       db		0eah     ;jmp xxxx:xxxx 
old1ch dd		? 
 
Time2Asc proc near 
         out		70h,al 
         in			al,71h 
         push		ax 
         shr		al,04h 
         add		al,30h 
         stosw 
         pop		ax 
         and		al,0fh 
         add		al,30h 
         stosw 
         ret 
Time2Asc endp 
 
@@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