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

📄 timer.asm

📁 用汇编语言实现的计时器
💻 ASM
字号:
DATA SEGMENT
HOUR DB ?
MIN  DB ?
SEC  DB ?
TS   DB 0AH,0DH,'PLEASE INPUT THE CURRENT TIME: $'
TS1   DB ':$'
DATA ENDS 

CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
;-----------输入分钟和秒函数-----------
INPUT PROC
       MOV AH,1
       INT 21H
       SUB AL,30H 
       CMP AL,6
       JGE EXIT1
       MUL CL
       MOV DL,AL
       MOV AH,1
       INT 21H
       SUB AL,30H
       ADD AL,DL      
EXIT1: RET
INPUT  ENDP
;-----------输入小时函数-----------
INPUT2 PROC
       MOV AH,1
       INT 21H
       SUB AL,30H
       CMP AL,2
       JG EXIT2
       MUL CL
       MOV DL,AL
       MOV AH,1
       INT 21H
       SUB AL,30H
       CMP AL,4
       JG EXIT2
       ADD AL,DL
EXIT2: RET
INPUT2 ENDP
;----------输出时间函数--------------
OUTPUT PROC
       PUSH DX
       PUSH SI
       MOV DL,30H
   L1: CMP SI,10
       JB  L2
       INC DL
       SUB SI,10
       JMP L1
   L2: MOV AH,2
       INT 21H
       MOV DX,SI
       ADD DL,30H
       MOV AH,2
       INT 21H
       POP SI
       POP DX
       RET
OUTPUT ENDP 
;-----------清屏函数---------------------
CLS    PROC
       PUSH AX
       PUSH BX
       PUSH CX
       PUSH DX
       MOV AX,0600H  ;AH=06(滚动),AL=00(全屏空白)
       MOV CX,0      ;左上角行:列
       MOV DX,184FH  ;右下角行:列
       MOV BH,7
       INT 10H
       POP DX
       POP CX
       POP BX
       POP AX
       RET
CLS  ENDP
;---------------光标位置设置函数----------
 POS   PROC 
       PUSH BX
       PUSH DX
       PUSH AX
       MOV BH,0
       MOV DX,0048H
       MOV AH,2
       INT 10H
       POP AX
       POP DX
       POP BX
       RET
POS   ENDP 
;------------主函数---------------------------
MAIN PROC FAR
START: PUSH DS
       XOR AX,AX
       PUSH AX
       MOV AX,DATA
       MOV DS,AX
       LEA DX,TS
       MOV AH,9
       INT 21H
       MOV CL,10
;--------------输入小时------
       CALL INPUT2
       MOV HOUR,AL
       LEA DX,TS1
       MOV AH,9
       INT 21H
;--------------输入分钟------
       CALL INPUT
       MOV MIN,AL
       LEA DX,TS1
       MOV AH,9
       INT 21H
;-------------输入秒-------
       CALL INPUT
       MOV SEC,AL
       
       
WAIT2: MOV AH,1
       INT 16H
       CMP AL,0DH
       JZ EXIT            ;检查有无输入回车(停止标志)
       MOV BX,20000
WAIT1: MOV CX,11204
 DELY: LOOP DELY           ;延迟一秒钟
       DEC BX
       JNZ WAIT1
       CALL CLS

       INC SEC
       CMP SEC,60          ;秒加一
       JNZ  AD
       INC MIN             ;分钟加一
       MOV SEC,0H
       CMP MIN,60
       JNZ AD
       INC HOUR            ;小时加一
       MOV MIN,0H
       CMP HOUR,24
       JNZ AD
       MOV HOUR,0H
       
       
;-----------------------
   AD: CALL POS           ;调用清屏函数
     
;----------------------
       MOV AL,HOUR
       CBW
       MOV SI,AX
       CALL OUTPUT        ;输出小时
       
;------------------------
       LEA DX,TS1
       MOV AH,9
       INT 21H
;----------------------
       MOV AL,MIN
       CBW
       MOV SI,AX
       CALL OUTPUT         ;输出分钟
       
;------------------------
       LEA DX,TS1
       MOV AH,9
       INT 21H
;----------------------
       
       MOV AL,SEC
       CBW
       MOV SI,AX
       CALL OUTPUT         ;输出秒钟
       JMP WAIT2


EXIT:  RET
MAIN   ENDP
CODE   ENDS
       END START
 












⌨️ 快捷键说明

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