📄 123.txt
字号:
STACK1 SEGMENT STACK
DW 200 DUP (?)
TP DB 256 DUP(0)
TPP EQU LENGTH TP
STACK1 ENDS
DATA SEGMENT
MESS DB 0AH,0DH,' >>WELCOME to USE!<< ',0AH,0DH,0AH,0DH
DB ' ***************>>ELECTRONIC CLOCK<<****************',0AH,0DH
DB ' * *',0AH,0DH
DB ' * MAJOR : ELECTRONIC INFORMATION *',0AH,0DH
DB ' * CLASS : 0304 *',0AH,0DH
DB ' * NO : 16 *',0AH,0DH
DB ' * NAME : Yang Shiwei *',0AH,0DH
DB ' * TEACHER:XIAO FENG *',0AH,0DH
DB ' * *',0AH,0DH
DB ' ****************************************************','$'
DBUFFER DB 8 DUP (':'),12 DUP (' ')
STR1 DB 0DH,0AH, 0AH,0DH,' PLEASE INPUT TIME(T) OR STOPWATCH(S) OR QUIT(Q) OR RESET(R) OR PAUSE(P):$'
STR2 DB 0DH,0AH,0DH,0AH,' The current time is : $'
COUNT DB 0
T1 DB ' The stopwatch time is:'
TENH DB 30H
HOUR DB 30H
DB ':'
TENM DB 30H
MINUTE DB 30H
DB ':'
TENS DB 30H
SECOND DB 30H,13,'$' ;不换行
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
CALL CLEAR ;调用清屏子程序
MOV AH,02H
MOV DX,0000H ;定显示位置
MOV BH,0
INT 10H
LEA DX,MESS
MOV AH,09H
INT 21H
LEA DX,STR1 ;显示提示信息
MOV AH,09
INT 21H
A: MOV AH,1 ;从键盘输入单个字符
INT 21H
CMP AL,'S'
JNE B
CALL STOPWATCH
B: CMP AL,'T' ;AL='T'?
JNE D
CALL TIME ;显示系统时间
D: CMP AL,'Q' ;AL='Q'?
JNE START
MOV AH,4CH ;返回dos状态
INT 21H
STOPWATCH PROC
MOV DX,0F1FH ;定时间显示颜色位置
MOV CX,8 ;显示颜色长度
MOV BX,02CH ;设置背景颜色(2)和前景颜色(C)
MOV AX,1300H
INT 10H
MOV AH,02H
MOV DX,0F00H ;定显示位置
MOV BH,0
INT 10H
PUSH DS
MOV AX,0
PUSH AX
CLI
MOV AX,DATA
MOV DS,AX
MOV AX,STACK1
MOV SS,AX
MOV SP,TPP
MOV AX,351CH
INT 21H
PUSH BX
PUSH ES
MOV DX,SEG TIMER
MOV DS,DX
LEA DX,TIMER
MOV AX,251CH
INT 21H
MOV AX,DATA
MOV DS,AX
CHECK: MOV AH,1
INT 16H
JZ TICKON2
E: CLI
MOV AH,00H
INT 16H
CMP AL,'S'
JE TICKON
CMP AL,'P'
JE TICKON1
CMP AL,'R'
JE RESET
CMP AL,'T'
JE T
CMP AL,'Q'
JE TICKOFF
JMP TICKON
T: JMP START
TICKON1: MOV AX,DATA
MOV DS,AX
MOV AX,351CH
INT 21H
MOV DX,SEG TIMER1
MOV DS,DX
LEA DX,TIMER1
MOV AX,251CH
INT 21H
MOV AX,DATA
MOV DS,AX
JMP E
RESET: MOV COUNT,0
MOV SECOND,30H
MOV TENS,30H
MOV MINUTE, 30H
MOV TENM,30H
MOV HOUR, 30H
MOV TENH,30H
MOV DX,OFFSET T1
MOV AH,9
INT 21H
MOV AH,0
INT 16H
CMP AL,'Q'
JE TICKOFF
CMP AL,'S'
JNE RESET
TICKON: MOV AX,351CH
INT 21H
MOV DX,SEG TIMER
MOV DS,DX
LEA DX,TIMER
MOV AX,251CH
INT 21H
MOV AX,DATA
MOV DS,AX
TICKON2: MOV DX,OFFSET T1
MOV AH,9
INT 21H
JMP CHECK
TICKOFF: CLI
POP DS
POP DX
MOV AX,251CH
INT 21H
STI
MOV AH,4CH
INT 21H
RET
STOPWATCH ENDP
TIMER1 PROC
IRET
TIMER1 ENDP
TIMER PROC FAR
PUSH AX
MOV AX,DATA
MOV DS,AX
ASSUME DS:DATA
INC COUNT
CMP COUNT,18
JL EXIT ;计数不满18跳回
MOV COUNT,0 ;计数满18清0重置
INC SECOND ;秒加1
CMP SECOND,39H
JLE EXIT
MOV SECOND,30H ;等于9清0重计
INC TENS ;十位加一
CMP TENS,36H
JL EXIT
MOV TENS,30H
INC MINUTE
CMP MINUTE,39H
JLE EXIT
MOV MINUTE, 30H
INC TENM
CMP TENM,36H
JL EXIT
MOV TENM,30H
INC HOUR
CMP HOUR,39H
JLE EXIT
MOV HOUR, 30H
INC TENH
CMP TENH,32H
JE TIME1
JL EXIT
TIME1: CMP HOUR , 34H
JL EXIT
MOV TENH,30H
EXIT: POP AX
IRET
TIMER ENDP
TIME PROC NEAR ;显示时间子程序
MOV AH,02H
MOV DX,0D25H ;定显示位置
MOV BH,0
INT 10H
LEA DX,STR2
MOV AH,9
INT 21H
DISPLAY1: MOV SI,0
MOV BX,100
DIV BL
MOV AH,2CH ;取时间
INT 21H
MOV AL,CH
CALL BCDASC ;将时间数值转换成ASCII码字符
INC SI
MOV AL,CL
CALL BCDASC
INC SI
MOV AL,DH
CALL BCDASC
MOV BP,OFFSET DBUFFER
MOV DX,0F1FH ;定时间显示颜色位置
MOV CX,8 ;显示颜色长度
MOV BX,02CH ;设置背景颜色(2)和前景颜色(C)
MOV AX,1300H
INT 10H
MOV AH,02H
MOV DX,0F26H ;定显示位置,光标
MOV BH,0
INT 10H
MOV BX,0018
RE: MOV CX,0FFFFH
REA: LOOP REA
DEC BX
JNZ RE
MOV AH,01H
INT 16H
JE DISPLAY1
JMP A
MOV AX,4C00H
INT 21H
RET
TIME ENDP
BCDASC PROC NEAR ;时间数值转换成ASCII码字符子程序
PUSH BX
CBW
MOV BL,10
DIV BL
ADD AL,'0'
MOV DBUFFER[SI],AL
INC SI
ADD AH,'0'
MOV DBUFFER[SI],AH
INC SI
POP BX
RET
BCDASC ENDP
CLEAR PROC NEAR
PUSH AX ;入栈保护现场
PUSH BX
PUSH CX
PUSH DX
MOV AX,0600H ;ah=06(滚动)al=00(全屏空白)
MOV BH,02FH ;设置背景颜色(2)和前景颜色(f)
SUB CX,CX
MOV DX,5F5FH
INT 10H
POP DX ;出栈恢复现场
POP CX
POP BX
POP AX
RET
CLEAR ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -