程序主要是想实现每隔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