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

|