⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a.asm

📁 高精度数字秒表
💻 ASM
字号:
STACK     SEGMENT PARA STACK 'STACK'
          DB 256 DUP(0)
STACK     ENDS
DATA      SEGMENT PARA PUBLIC 'DATA'
INFO      DB 'MODE1:MIAOBIAO   MODE2:TIMER               R:RESET  ESC:OVER  H:HOLD  J:GOON    SP:WRITE         CR:READ                   PLEASE CHOOSE 1 OR 2 $'

INFO2     DB 'PLEASE INPUT TIME:$'
FLAG      DB 0
FLAG1     DB 0
INPUT     DB 9,'0','0','0',':','0','0',':','0','0'

TENMINUTE DB '0'
MINUTE    DB '0'
          DB ':'
TENSECOND DB '0'
SECOND    DB '0'
          DB ':'
SECOND1   DB '0'
SECOND2   DB '0'
          DB '     '

YEAR      DB 0
YEAR1     DB 0
YEAR2     DB 0
YEAR3     DB 0
          DB '-'
MONTH     DB 0
MONTH1    DB 0
          DB '-'
DATE      DB 0
DATE1     DB 0
JILU      DB  'N','O','N','E',256 dup ('$')
DATA      ENDS
CODE      SEGMENT PARA PUBLIC 'CODE' 
          ASSUME CS:CODE,DS:DATA,ES:DATA
START:
          MOV    AX,DATA
          MOV    DS,AX
          MOV    ES,AX 
          CALL   CLRSC
          MOV    AH,09H                ;显示初始信息
          MOV    DX,OFFSET INFO
          INT    21H
          MOV    AL,0DH                  
          CALL   DISPCHAR
CHOOSE:
          MOV    AH,8                  ;等待模式选择
          INT    21H
          CMP    AL,'1'
          JE     CHRONOGRAPH
          CMP    AL,'2'
          JE     TIMER
          CMP    AL,01BH
          JE     OVER1
          JMP    CHOOSE
OVER1:                                 ;跳出程序
          MOV    AH,4CH
          INT    21H
CHRONOGRAPH:                           ;进入秒表模式
          MOV    FLAG,1
          JMP    GO

TIMER:                                 ;进入定时模式
          MOV    FLAG,0
          CALL   CLRSC
          MOV    AH,09H
          MOV    DX,OFFSET INFO2       ;输入提示信息
          INT    21H
          MOV    DX,OFFSET INPUT       ;输入时间
          MOV    AH,0AH
          INT    21H
          MOV    SI,OFFSET INPUT+2      
          MOV    AL,[SI]
          MOV    TENMINUTE ,AL
          MOV    AL,[SI+1] 
          MOV    MINUTE , AL
          MOV    AL,[SI+3]       
          MOV    TENSECOND , AL
          MOV    AL,[SI+4]
          MOV    SECOND ,AL
          MOV    AL,[SI+6]     
          MOV    SECOND1, AL
          MOV    AL,[SI+7]  
          MOV    SECOND2, AL
GO:  
          PUSH   DI  
          CLI
          MOV    AX,0
          MOV    ES,AX       
          MOV    DI,20H               ;修改08H中断向量
          MOV    AX,OFFSET TIMER0
          STOSW
          MOV    AX,CS
          STOSW
          MOV    AL,36H               ;8253初始化
          OUT    43H,AL
          MOV    BX,1132               
          MOV    AL,BL
          OUT    40H,AL
          MOV    AL,BH
          OUT    40H,AL
          MOV    AL,0FCH
          OUT    21H,AL
          STI
          POP    DI
          PUSH   AX                   ;调用系统日期
          PUSH   BX
          PUSH   CX
          PUSH   DX
          PUSH   SI
          MOV    AH,2AH
          INT    21H
          MOV    AX,CX
          MOV    BX,DX
          MOV    DX,0
          MOV    SI,1000
          DIV    SI
          MOV    SI,DX
          OR     AL,30H
          MOV    YEAR,AL
          MOV    AX,SI
          MOV    DL,100
          DIV    DL
          MOV    DH,AH
          OR     AL,30H
          MOV    YEAR1,AL
          MOV    AH,0
          MOV    AL,DH
          MOV    DL,10
          DIV    DL
          OR     AL,30H
          MOV    YEAR2,AL
          MOV    AL,DH
          OR     AL,30H
          MOV    YEAR3,AL
          MOV    CX,BX 
          MOV    AX,BX
          MOV    AL,AH
          MOV    AH,0
          MOV    BH,10
          DIV    BH
          OR     AL,30H
          OR     AH,30H
          MOV    DH,AH
          MOV    MONTH,AL
          MOV    MONTH1,DH
          MOV    AX,CX
          MOV    AH,0
          MOV    BH,10
          DIV    BH
          OR     AL,30H
          OR     AH,30H
          MOV    DH,AH
          MOV    DATE,AL
          MOV    DATE1,DH
          POP    SI
          POP    DX
          POP    CX
          POP    BX
          POP    AX                ;调用日期结束
          CALL   CLRSC
FOREVER:
          MOV    BX,OFFSET TENMINUTE
          MOV    CX,23
DISPCLK:
          MOV    AL,[BX]           ;显示时间几日期
          CALL   DISPCHAR
          INC    BX
          LOOP   DISPCLK
          MOV    AL,0DH
          CALL   DISPCHAR
          MOV    AL,SECOND2

WAIT3:  
          CMP    AL,SECOND2
          CLI
          PUSHF
          PUSH   AX
          MOV    AH,0BH            ;键盘扫描
          INT    21H
          CMP    AL,0FFH
          JE     SCAN 
          jmp    WAIT1         
SCAN:                           
          MOV    AH,7
          INT    21H
          CMP    AL,72H
          JE     RESET
          CMP    AL,01BH
          JE     OVER
          CMP    AL,68H
          JE     HOLD
          CMP    AL,020H
          JE     WRITE
          JMP    WAIT1
OVER:
          MOV    AH,4CH            ;跳出程序
          INT    21H
WRITE:                             ;存储当前时间
          PUSH   AX
          cmp    flag1,0
          jne    write1
          MOV    DI,OFFSET JILU                            
          mov    FLAG1,2
WRITE1: 
          MOV    AL,TENMINUTE
          MOV    [DI],AL
          INC    DI
          MOV    AL,MINUTE
          MOV    [DI],AL
          INC    DI
          MOV    AL,':'
          MOV    [DI],AL
          INC    DI
          MOV    AL,TENSECOND
          MOV    [DI],AL
          INC    DI
          MOV    AL,SECOND
          MOV    [DI],AL
          INC    DI
          MOV    AL,':'
          MOV    [DI],AL
          INC    DI
          MOV    AL, SECOND1
          MOV    [DI],AL
          INC    DI
          MOV    AL,SECOND2
          MOV    [DI],AL
          INC    DI
          MOV    AL,' '
          MOV    [DI],AL
          INC    DI
          MOV    AL,' '
          MOV    [DI],AL
          INC    DI
          POP    AX
          JMP    WAIT1
WAIT2 : 
          JMP    WAIT3               ;中间跳点  
RESET:                               ;复位
          MOV    TENMINUTE , '0'
          MOV    MINUTE , '0'
          MOV    TENSECOND , '0'
          MOV    SECOND , '0'
          MOV    SECOND1, '0'
          MOV    SECOND2 , '0'
          CALL   START
HOLD:                               ;暂停
          PUSHF
          PUSH   AX
          MOV    AH,08h
          INT    21H
          CMP    AL,0DH
          JE     READ
          CMP    AL,6AH
          JNE    HOLD
          POP    AX
          POPF 
          JMP    WAIT1
READ:                                ;显示记录
          CALL   CLRSC      
          MOV    DX,OFFSET JILU
          MOV    AH,09H
          INT    21H
          MOV    AH,4CH
          INT    21H
WAIT1:  
          POP    AX
          POPF 
          STI
          JZ     WAIT2 
          JMP    FOREVER
TIMER0    PROC   FAR                 ;08H中断向量入口
          PUSH   AX
          CMP    FLAG,0
          JNE    TIMER2
TIMER1:
          DEC    SECOND2             ;定时
          CMP    SECOND2,'0'
          JGE    TIMERX
          MOV    SECOND2,'9'
          DEC    SECOND1
          CMP    SECOND1,'0'
          JGE    TIMERX
          MOV    SECOND1,'9'
          DEC    SECOND
          CMP    SECOND,'0'
          JGE    TIMERX
          MOV    SECOND,'9'
          DEC    TENSECOND
          CMP    TENSECOND,'0'
          JGE    TIMERX
          MOV    TENSECOND,'5'
          DEC    MINUTE
          CMP    MINUTE,'0'
          JGE    TIMERX
          MOV    MINUTE,'9'
          DEC    TENMINUTE
          CMP    TENMINUTE,'0'
          JGE    TIMERX
          MOV    AH,4CH
          INT    21H
TIMERX:
          MOV    AL,20H
          OUT    20H,AL
          POP    AX
          IRET
TIMER2:                               ;秒表
          INC    SECOND2
          CMP    SECOND2,'9'
          JLE    TIMERX1
          MOV    SECOND2,'0'
          INC    SECOND1
          CMP    SECOND1,'9'
          JLE    TIMERX1
          MOV    SECOND1,'0'
          INC    SECOND
          CMP    SECOND,'9'
          JLE    TIMERX1
          MOV    SECOND,'0'
          INC    TENSECOND
          CMP    TENSECOND,'6'
          JL     TIMERX1
          MOV    TENSECOND,'0'
          INC    MINUTE
          CMP    MINUTE,'9'
          JLE    TIMERX1
          MOV    MINUTE,'0'
          INC    TENMINUTE
          CMP    TENMINUTE,'9'
          JLE    TIMERX1
          MOV    TENMINUTE,'0'
TIMERX1:
          MOV    AL,20H
          OUT    20H,AL
          POP    AX
          IRET
DISPCHAR  PROC   NEAR               ;显示字符子程序
          PUSH   BX
          MOV    BX,0
          MOV    AH,14
          INT    10H
          POP    BX
          RET
DISPCHAR  ENDP
CLRSC     PROC   NEAR
          PUSH   AX                 ;清屏子程序
          PUSH   BX
          PUSH   CX
          PUSH   DX
          MOV    CX,0
          MOV    DH,25
          MOV    DL,79
          MOV    BH,7
          MOV    AL,0
          MOV    AH,6
          INT    10H
          POP    DX
          POP    CX
          POP    BX
          POP    AX
          RET
CLRSC     ENDP
CODE      ENDS
          END    START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -