Dos........不知道是否老掉牙了 代码如下(MASM v5.0编译通过):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;2005.7.13-7.24 ;;这是一个驻留内存的时钟,本程序显示时钟的时候是直接修改显示缓冲区的 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;COM的程序,只有一个段 code segment org 100h;com文件需要在开头预留100h字节的空间 assume cs:code , ds:code main: jmp start;要跳开数据部分,不能执行 welcome db '+---------------------------------------------------+' ,0ah ,0dh db '+ This is a clock +' ,0ah ,0dh db '+ ---write by Future Yao+' ,0ah ,0dh db '+---------------------------------------------------+' ,0ah ,0dh ,'$' old_int dd ? TSR proc far ;保护现场 push ax push bx push cx push dx push si push di push bp push sp push es push ds sti call disp cli ;返回现场 pop ds pop es pop sp pop bp pop di pop si pop dx pop cx pop bx pop ax jmp cs:old_int TSR endp disp proc near push ax push cx push dx push es push bx ;进行初始化 mov ax,0b800h mov es,ax ;获得时间 mov ah, 02h int 1ah mov ax, 0eh ;显示小时的高位 mov bh,ch shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h mov es:0090h,bh mov es:0091h,ax ;显示小时的低位 and ch,0fh add ch,30h mov es:0092h,ch mov es:0093h,ax ;显示分隔符号: mov byte ptr es:0094h,':' mov es:0095h,ax ;显示分钟的高位 mov bh,cl shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h mov es:0096h,bh mov es:0097h,ax ;显示分钟的低位 and cl,0fh add cl,30h mov es:0098h,cl mov es:0099h,ax ;显示分隔符号: mov byte ptr es:009ah,':' mov es:009bh,ax
;显示秒的高位 mov bh,dh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h mov es:009ch,bh mov es:009dh,ax ;显示秒的低位 and dh,0fh add dh,30h mov es:009eh,dh mov es:009fh,al pop bx pop es pop dx pop cx pop ax ret
disp endp start: mov dx ,offset welcome mov ah ,09h int 21h mov ax ,351Ch int 21h;读取中断向量
mov word ptr old_int , bx mov word ptr old_int[2] , es mov dx , offset TSR push cs pop ds mov ax , 251Ch int 21h mov dx , offset start int 27h code ends end main
|