主题:做一个定时钟
嘿嘿^终于把这个问题跟基本解决了,但还有很奇怪的是为什么我在自己的机子上只能有3秒,在别的机上有5秒,而我想实现的是一直工作,请高手指点下!谢谢!
data segment
count dw 1 ;ms计数器
mess1 db 'The current time is:',13,10,'$'
data ends
;********************************************************************
sta segment stack
dw 200 dup(?)
sta ends
;********************************************************************
code segment
assume cs:code,ds:data
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ax,sta
mov ss,ax
mov al,1ch
mov ah,35h
int 21h
push es
push bx
push ds
mov dx,offset new1ch
mov ax,seg new1ch
mov ds,ax
mov al,1ch
mov ah,25h
int 21h
pop ds
in al,21h
and al,11111110b
out 21h,al
sti
mov di,0ffffH
delay:
mov si,0ffffH
delay1:
dec si
jnz delay1
dec di
jnz delay
pop dx
pop ds
mov al,1ch
mov ah,25h
int 21h
ret
main endp
;********************************************************************
new1ch proc near
push ds
push ax
;push bx
;push cx
push dx
mov ax,data
mov ds,ax
sti
dec count
jnz EXIT
lea dx,mess1
mov ah,09h
int 21h
mov ah,2ch
int 21h
call DISP
mov count,18
EXIT:
cli
pop dx
;pop cx
;pop bx
pop ax
pop ds
iret
new1ch endp
;********************************************************************
DISP proc near
mov al,ch
cbw
call bintdec
mov dl,':'
mov ah,02h
int 21h
mov al,cl
cbw
call bintdec
mov dl,':'
mov ah,02h
int 21h
mov al,dh
cbw
call bintdec
call CF
ret
DISP endp
;********************************************************************
bintdec proc near
push ax
push cx
push dx
mov dx,0
mov cx,10d
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dx,bx
add dl,30h
mov ah,02h
int 21h
pop dx
pop cx
pop ax
ret
bintdec endp
;********************************************************************
CF proc near
push ax
push dx
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
pop dx
pop ax
ret
CF endp
;******************************************************************************
code ends
end start
data segment
count dw 1 ;ms计数器
mess1 db 'The current time is:',13,10,'$'
data ends
;********************************************************************
sta segment stack
dw 200 dup(?)
sta ends
;********************************************************************
code segment
assume cs:code,ds:data
main proc far
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ax,sta
mov ss,ax
mov al,1ch
mov ah,35h
int 21h
push es
push bx
push ds
mov dx,offset new1ch
mov ax,seg new1ch
mov ds,ax
mov al,1ch
mov ah,25h
int 21h
pop ds
in al,21h
and al,11111110b
out 21h,al
sti
mov di,0ffffH
delay:
mov si,0ffffH
delay1:
dec si
jnz delay1
dec di
jnz delay
pop dx
pop ds
mov al,1ch
mov ah,25h
int 21h
ret
main endp
;********************************************************************
new1ch proc near
push ds
push ax
;push bx
;push cx
push dx
mov ax,data
mov ds,ax
sti
dec count
jnz EXIT
lea dx,mess1
mov ah,09h
int 21h
mov ah,2ch
int 21h
call DISP
mov count,18
EXIT:
cli
pop dx
;pop cx
;pop bx
pop ax
pop ds
iret
new1ch endp
;********************************************************************
DISP proc near
mov al,ch
cbw
call bintdec
mov dl,':'
mov ah,02h
int 21h
mov al,cl
cbw
call bintdec
mov dl,':'
mov ah,02h
int 21h
mov al,dh
cbw
call bintdec
call CF
ret
DISP endp
;********************************************************************
bintdec proc near
push ax
push cx
push dx
mov dx,0
mov cx,10d
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,02h
int 21h
mov dx,bx
add dl,30h
mov ah,02h
int 21h
pop dx
pop cx
pop ax
ret
bintdec endp
;********************************************************************
CF proc near
push ax
push dx
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h
pop dx
pop ax
ret
CF endp
;******************************************************************************
code ends
end start