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

|