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

📄 clock.asm

📁 源程序
💻 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 + -