📄 clock.asm
字号:
;*************************
;项目 系统时钟显示
;姓名 蔡晓程
;学号 2002374301
;班级 2002计算机3班
;*************************
DATA SEGMENT
THIRTY DB 15 ;用于星期显示
NAM DB ' This program was created by Cai Xiaocheng>>>My number is 2002374301','$'
CLA DB ' 2002 COMPUTER 3','$'
EXT DB ' Please press [ESC] to end this program!','$'
SUN DB ' Sunday ','$'
MON DB ' Monday ','$'
TUE DB ' Tuesday ','$'
WED DB ' Wednesday ','$'
THU DB ' Thursday ','$'
FRI DB ' Friday ','$'
SAT DB ' Saturday ','$'
DATE DB 'The data is ','$'
TIME DB ' Now the time is ','$'
TBUFF DB 4 DUP(?) ;用于进制转换
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AH,02 ;隐藏光标(鼠标)
AND CH,1FH
OR CH,20H
MOV AH,01
INT 10H
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DX,OFFSET NAM ;显示作者名字和学号信息
MOV AH,9
INT 21H
MOV DL,0DH ;回车
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DX,OFFSET CLA ;显示作者班级信息
MOV AH,9
INT 21H
MOV DL,0DH ;回车
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DX,OFFSET EXT ;提示按[ESC]键退出程序
MOV AH,9
INT 21H
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
MOV DL,0AH ;换行
CALL SHOW
AGAIN:
PUSH DX
MOV DL,0DH ;回车
CALL SHOW
POP DX
MOV DL,0FFH ;循环检测键盘输入
MOV AH,6
INT 21H
CMP AL,1BH ;检测是否输入[ESC]键
JNZ NEXT ;不为ESC,则继续循环检测
MOV AH,4CH ;若为ESC,则返回DOS退出程序
INT 21H
NEXT:
MOV AH,2AH ;读取系统日期
INT 21H
MUL THIRTY
PUSH DX
MOV AH,0
MOV DX,OFFSET SUN ;显示星期
ADD DX,AX
MOV AH,9
INT 21H
POP DX
PUSH DX
MOV DL,' ' ;输出空格
CALL SHOW
POP DX
PUSH DX
MOV DX,OFFSET DATE ;输出字符串"The data is "
MOV AH,9
INT 21H
POP DX
MOV AX,CX
CALL DISPLAYW ;输出年份
PUSH DX
MOV DL,'-' ;输出空格
CALL SHOW
POP DX
MOV AL,DH ;输出月份
CALL DISPLAYB
PUSH DX
MOV DL,'-' ;输出空格
CALL SHOW
POP DX
MOV AL,DL ;输出日数
CALL DISPLAYB
PUSH DX
MOV DL,' ' ;输出空格
CALL SHOW
POP DX
PUSH DX
MOV DL,' ' ;输出空格
CALL SHOW
POP DX
MOV DX,OFFSET TIME ;输出字符串"Now the time is "
MOV AH,9
INT 21H
MOV AH,2CH ;读取系统时间
INT 21H
MOV AL,CH ;显示小时
CALL DISPLAYB
PUSH DX
MOV DL,':' ;输出':'
CALL SHOW
POP DX
MOV AL,CL ;显示分钟
CALL DISPLAYB
PUSH DX
MOV DL,':' ;输出':'
CALL SHOW
POP DX
MOV AL,DH ;显示秒钟
CALL DISPLAYB
PUSH DX
MOV DL,':' ;输出':'
CALL SHOW
POP DX
MOV AL,DL ;输出百分之一秒数
CALL DISPLAYB
JMP AGAIN ;循环
DISPLAYB PROC NEAR ;(子程序)实现8位二进制数的十进制形式输出
PUSH DI
PUSH CX
PUSH AX
MOV CX,2
LEA DI,TBUFF
DEC1:
PUSH CX
MOV AH,0
MOV CL,10
DIV CL
ADD AH,30H
MOV [DI],AH
INC DI
POP CX
DEC CX
JNZ DEC1
MOV CX,2
DEC2:
DEC DI
MOV AL,[DI]
CALL STDOUT ;标准输出
LOOP DEC2
POP AX
POP CX
POP DI
RET
DISPLAYB ENDP
DISPLAYW PROC NEAR ;(子程序)实现16位二进制数的十进制形式输出
PUSH DI
PUSH DX
PUSH CX
PUSH AX
MOV CX,0
LEA DI,TBUFF
DEC3:
PUSH CX
MOV DX,0
MOV CX,10
DIV CX
XCHG AX,DX
ADD AL,30H
MOV [DI],AL
MOV AX,DX
INC DI
POP CX
INC CX
CMP DX,0
JNZ DEC3
DEC4:
DEC DI
MOV AL,[DI]
CALL STDOUT ;标准输出
LOOP DEC4
POP AX
POP CX
POP DX
POP DI
RET
DISPLAYW ENDP
SHOW PROC NEAR ;(子程序)实现字符输出
PUSH AX
MOV AH,2
INT 21H
POP AX
RET
SHOW ENDP
STDOUT PROC NEAR ;(子程序)标准输出
PUSH DX
MOV DL,AL
MOV AH,2
INT 21H
POP DX
RET
STDOUT ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -