汇编基于PC机的8254日时钟中断的字符串动态显示——时:分:秒

来源:互联网 发布:java 双引号转义 编辑:程序博客网 时间:2024/06/01 08:10

汇编基于PC机的8254日时钟中断的字符串动态显示——时:分:秒

效果图如下:
这里写图片描述

这里写图片描述

如何实现这种效果呢?很简单,只需要把以下代码复制一遍运行就可以了

.486DATA SEGMENT USE16    OLD1C DD ?      ; SAVE THE OLD 1C INT    ICOUNT DB 18  ;18*55MS = 990MS <==> 1S    COUNT DB 1    ;CIRCLE ALLTIME    TIME DB 0,0,0  ; HOUR,MINUTE,SECONDDATA ENDSCODE SEGMENT USE16    ASSUME CS:CODE,DS:DATABEG:    MOV AX,DATA    MOV DS,AX    CLI  ; CLOSE INT    CALL READ1C    CALL WRITE1C    STI ;OPEN INTSCAN:    CMP COUNT,0    JNZ SCAN   ; CIRCLE ALLTIME   <==>  WHILE 1    CALL RESET    ;QUIT    MOV AH,4CH    INT 21H;-------------------------------SERVICE PROC    PUSHA    PUSH DS    MOV AX,DATA    MOV DS,AX    DEC ICOUNT    JNZ EXIT    MOV ICOUNT,18    ;===========================    ;=============================    ;CLS    MOV AX,0003H    INT 10H    ;SHOW TIME    CALL SHOW    ;INC SECOND    INC TIME+2    CMP TIME+2,60 ;JUDGE IF SECOND = 60    JNZ EXIT    MOV TIME+2,0    INC TIME+1    CMP TIME+1,60 ; JUDGE IF MINUTE = 60    JNZ EXIT    MOV TIME+1,0    INC TIME    CMP TIME,24 ;JUDGE IF HOUR = 24    JNZ EXIT    MOV TIME,0    MOV TIME+1,0    MOV TIME+2,0    ;==============================    ;==============================EXIT:    POP DS    POPA    IRETSERVICE ENDP;--------------------SHOW PROC     PUSHA    PUSH AX    PUSH BX    PUSH CX    LEA BX,TIME    ;FROM BX TO BX+3, CONVERT TO DEMICAL AND SHOW    MOV SI,0AGA1:    MOV DL,0    MOV DH,BYTE PTR[BX+SI]AGA2:     ; HOW MANY 10 IN [BX+SI]    CMP DH,10    JC NEXT1    INC DL    SUB DH,10    JMP AGA2NEXT1:    ADD DL,30H    MOV AH,2    INT 21H  ; SHOW THE 10 POS    MOV DL,DH    ADD DL,30H    INT 21H  ; SHOW THEN 1 POS    CMP SI,2    JZ NEXT2    MOV DL,':'    INT 21H     ; SHOW A ":" BWTWEEN HOUR,MINUTE,SECONDNEXT2:    ;IF NEXT TIME POS    CMP SI,2     JZ EXITSHOW    INC SI    JMP AGA1EXITSHOW:    POP CX    POP BX    POP AX    POPASHOW ENDP;---------------------;READ AND SAVE THE OLD 1C INTREAD1C PROC    MOV AX,351CH    INT 21H    MOV WORD PTR OLD1C,BX    MOV WORD PTR OLD1C+2,ES    RETREAD1C ENDP;--------------------------;WRITE SERVICE TO THE 1C INTWRITE1C PROC    PUSH DS    MOV AX,CODE    MOV DS,AX    LEA DX,SERVICE    MOV AX,251CH    INT 21H    POP DS    RETWRITE1C ENDP;-------------------------;RESET OLD1C INTRESET PROC    MOV DX,WORD PTR OLD1C    MOV DS,WORD PTR OLD1C+2    MOV AX,251CH    INT 21H    RETRESET ENDP;--------------------------CODE ENDS    END BEG
0 0
原创粉丝点击