主题:中断 系统时间
程序主要是想实现每隔1S自动的取系统的时间显示出来,但由于对中断理解不透彻,程序出了问题,望高手指点!
data segment
count dw 0 ;ms计数器
flag db 0 ;‘1 s’到来的标志
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
;
; mov ah,1
; int 16h
; jz TEST_S
; cmp al,'Q'
; jz EXIT
;TEST_S:
AGAIN:
cmp flag,1
jne AGAIN
lea dx,mess1
mov ah,09h
int 21h
mov ah,2ch
int 21h
call DISP
mov flag,0
EXIT:
pop dx
pop ds
mov al,1ch
mov ah,25h
int 21h
ret
main endp
;********************************************************************
new1ch proc near
push ax
sti
add count,55 ;每隔55ms中断一次
cmp count,1000
jb BACK
mov flag,1
sub count,1000
BACK:
cli
pop ax
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
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
;********************************************************************
code ends
end start
data segment
count dw 0 ;ms计数器
flag db 0 ;‘1 s’到来的标志
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
;
; mov ah,1
; int 16h
; jz TEST_S
; cmp al,'Q'
; jz EXIT
;TEST_S:
AGAIN:
cmp flag,1
jne AGAIN
lea dx,mess1
mov ah,09h
int 21h
mov ah,2ch
int 21h
call DISP
mov flag,0
EXIT:
pop dx
pop ds
mov al,1ch
mov ah,25h
int 21h
ret
main endp
;********************************************************************
new1ch proc near
push ax
sti
add count,55 ;每隔55ms中断一次
cmp count,1000
jb BACK
mov flag,1
sub count,1000
BACK:
cli
pop ax
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
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
;********************************************************************
code ends
end start