📄 4t.asm
字号:
PUBLIC FTH
DATA SEGMENT PARA PUBLIC 'DATA'
TIME DB 'HH:MM:SS'
DB '$'
TIPS DB 'PRESS ANY KEY TO EDIT TIME. PRESS ESC TO EXIT'
DB '$'
INPUT DB 'INPUT THE TIME IN THIS FORM HH:MM:SS '
DB '$'
ERRORM DB 'WRONG FORM. '
DB '$'
TIMEF DB 8 DUP(?)
BUF DB 100
DB ?
DB 100 DUP(?)
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 200 DUP(?)
STACK ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK
FTH PROC NEAR
MOV AH,06H
MOV BH,07
MOV CX,0
MOV DX,184FH
INT 10H ;清屏
MOV AH,2
MOV DH,0
MOV DL,0
MOV BH,0
INT 10H ;光标控制
LEA DX,TIPS
MOV AH,9
INT 21H
GO: MOV AH,2
MOV DH,10
MOV DL,30
MOV BH,0
INT 10H ;光标控制
;************读时钟****************
MOV AH,2
INT 1AH
;*********时间显示(码制转换)*******
MOV BX,CX
MOV AH,BH ;处理小时
AND AH,0F0H
MOV CX,4
SHR AH,CL
ADD AH,30H
LEA DI,TIME
MOV [DI],AH
AND BH,0FH
ADD BH,30H
INC DI
MOV [DI],BH
INC DI
MOV AH,BL ;处理分钟
AND AH,0F0H
MOV CX,4
SHR AH,CL
ADD AH,30H
INC DI
MOV [DI],AH
AND BL,0FH
ADD BL,30H
INC DI
MOV [DI],BL
INC DI
MOV AH,DH ;处理秒
AND AH,0F0H
MOV CX,4
SHR AH,CL
ADD AH,30H
INC DI
MOV [DI],AH
AND DH,0FH
ADD DH,30H
INC DI
MOV [DI],DH
;*******完成时间显示********
LEA DX,TIME
MOV AH,9
INT 21H
;*********延时处理***********
MOV CX,0AFFH
DELAY: NOP
MOV DX,0FFFH
DE2: DEC DX
CMP DX,1
JNZ DE2
LOOP DELAY
;********************
MOV AH,0BH
INT 21H
CMP AL,0
JNE YES
JMP NEAR PTR GO
YES: MOV AH,01H
INT 16H
CMP AL,1BH
JNE PASS
JMP NEAR PTR EXIT
PASS: CALL STIME
JMP NEAR PTR GO
STIME PROC NEAR
MOV AH,06H
MOV BH,07
MOV CX,0
MOV DX,184FH
INT 10H ;清屏
MOV AH,2
MOV DH,0
MOV DL,0
MOV BH,0
INT 10H ;光标控制
AGAIN: LEA DX,INPUT
MOV AH,09H
INT 21H
LEA DX,BUF
MOV AH,0CH
MOV AL,0AH
INT 21H
;*********对时间码制进行转换并设置时间********
LEA DI,BUF
LEA SI,TIMEF
INC DI
MOV AL,[DI]
CMP AL,8
;*********由于直接用jne超出128字节,稍做修改****
JE FIT
JMP NEAR PTR ERROR
FIT: INC DI
MOV CX,3
MOV DL,10
TRAN: MOV AH,0
MOV AL,[DI]
SUB AL,30H
JL ERROR
CMP AL,09H
JG ERROR
PUSH CX
MOV CX,4
SAL AL,CL
POP CX
INC DI
MOV BL,[DI]
SUB BL,30H
JB ERROR
CMP BL,09H
JA ERROR
AND BL,0FH
OR AL,BL
MOV [SI],AL
CMP CL,1
JE SKIP
INC SI
INC DI
MOV AL,[DI]
CMP AL,3AH
JNE ERROR
INC DI
SKIP: LOOP TRAN
LEA SI,TIMEF
MOV AL, [SI]
CMP AL,23H
JA ERROR
INC SI
MOV AL,[SI]
CMP AL,59H
JA ERROR
INC SI
MOV AL,[SI]
CMP AL,59H
JA ERROR
;*********设置时间*******
LEA SI,TIMEF
MOV CH,[SI]
INC SI
MOV CL,[SI]
INC SI
MOV DH,[SI]
MOV DL,0
MOV AH,03H
INT 1AH
;*******************************************
MOV AH,06H
MOV BH,07
MOV CX,0
MOV DX,184FH
INT 10H ;清屏
MOV AH,2
MOV DH,0
MOV DL,0
MOV BH,0
INT 10H ;光标控制
LEA DX,TIPS
MOV AH,9
INT 21H
JMP ENST
ERROR: MOV AH,06H
MOV BH,07
MOV CX,0
MOV DX,184FH
INT 10H ;清屏
MOV AH,2
MOV DH,0
MOV DL,0
MOV BH,0
INT 10H ;光标控制
LEA DX,ERRORM
MOV AH,9
INT 21H
JMP AGAIN
ENST: RET
STIME ENDP
EXIT: RET
FTH ENDP
CODE ENDS
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -