汇编显示时间日期源码
CLEAR_SCREEN MACRO OP1,OP2,OP3,OP4
MOV AH,06H
MOV AL,00H
MOV BH,79H
MOV CH,OP1
MOV CH,OP2
MOV CH,OP3
MOV CH,OP4
int 10H
MOV AH,02H
MOV BH,00H
MOV DH1,00H
MOV DL,00H
int 10H
ENDM
STACK SEGMENT STACK ;定义堆栈段
DB 200 DUP (0)
STACK ENDS
DATA SEGMENT ;定义数据段
WELCOME DB'WELCOME YOU TO COME HERE!$' ;提示界面
INF01 DB 0DH,0AH,'THIS IS A DISPLAY PROGAME!$'
INF02 DB 0DH,0AH,'PLEASE INPUT "D" "T" OR "Q" TO SHOW DATATIME OR EXIT!$'
INF03 DB 0DH,0AH,'D:DISPLAY SYSTEM DATE:$'
INF04 DB 0DH,0AH,'T:DISPLAY SYSTEM TIME:$'
INF05 DB 0DH,0AH,'Q:QUIT.$' INF06 DB 0DH,0AH,'PLEASE INPUT THE CHAR:$'
INPUTER DB 0DH,0AH,'PNPUT ERROR!$' DATEDIS DB '00-00-0000',0AH,'$' ;显示DATE TIMEDIS DB '00:00:00',0DH,0AH,0AH,'$' ;显示TIME DATA ENDS
CODE SEGMENT ;代码段定义
ASSUME CS:CODE,DS:DATA,SS:STACK
;主程序
MAIN PROC FAR
start: MOV AH,0 ;设置40*25图形显示
MOV AL,3
int 10H
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
;显示宏定义
SHOW MACRO b
LEA DX,b
MOV AH,9
int 21H
ENDM
SHOW WELCOME ;显示数据段落的内容 SHOW INF01
SHOW INF02
SHOW INF03
SHOW INF04
SHOW INF05
SHOW INF06
INPUT: MOV AH,01 ;键盘输入回写
int 21H
CMP AL,44H ;与D比较
JNE L1 ;不相等转到L1
CALL DATEDISPLAY ;相等调用DATADISPLAY
JMP EXIT1
L1: CMP AL,54H ;与T比较
JNE L2 ;不相等转L2
CALL TIMEDISPLAY ;相等调用TIMEDISPLAY
JMP EXIT1
L2: CMP AL,51H ;与Q比较
JE EXIT ;相等转到EXIT SHOW INPUTER ;显示输入错误
SHOW INF05 ;显示输入提示INF05
JMP INPUT
EXIT1: SHOW INF05 ;显示输入提示INF05
JMP INPUT
EXIT: MOV AH,4CH ;结束
int 21H
MAIN ENDP
;日期显示子程序
DATEDISPLAY PROC NEAR
LEA DX,INF03 ;将INF03的偏移地址放到DX中,使DX指向INF03
MOV AH,09H ;调用9号功能显示字符串
INT 21H
MOV AH,04H ;调用bios(基本输入输出系统) 1A中段获取系统日期
INT 1AH ;CH,BCD码格式的世纪
;CL,BCD码格式的年
;DH,BCD码格式的月
;DL,BCD码格式的日
;CF,0时钟在走,否则,时钟停止
MOV AX,CX ;设置年并覆盖00/00/0000中的0000
MOV CX,4 ;需要循环4次,把年的4位中每一位
LEA SI,DATEDIS+6 ;取出,并覆盖掉DATEDIS中的后四位字符 LA1:
PUSH CX
MOV CL,4
ROL AX,CL
MOV BL,AL
AND BL,0FH
OR BL,30H
MOV [SI],BL
INC SI
POP CX
LOOP LA1
MOV AX,DX ;设置月日并覆盖00-00-0000中的00-00
MOV CX,4 ;需要循环4次,把年的4位中每一位
LEA SI,DATEDIS ;取出,并覆盖掉DATEDIS中的第1.2.4.5位字符
LA2:
PUSH CX
MOV CL,4
ROL AX,CL
MOV BL,AL
AND BL,0FH
OR BL,30H
MOV [SI],BL
INC SI
POP CX
CMP CX,3
JNZ P2 ;跳过00-00中的'-'
INC SI
P2:
LOOP LA2
LEA DX,DATEDIS ;显示系统当前日期
MOV AH,09H
INT 21H
RET ;调用后返回
DATEDISPLAY ENDP
;时间显示子程序
TIMEDISPLAY PROC NEAR
LEA DX,INF04 ;将INF04的偏移地址放到DX中,使DX指向INF04
MOV AH,09H ;调用9号功能显示字符串
INT 21H
MOV AH,02H ;调用bios 1A中断的二号功能获取系统时间;时间计数器当前值
写入数据区
INT 1AH ;CH,BCD码格式的小时
;CL,BCD码格式的分钟
;DH,BCD码格式的秒
;DL,00H标准时间,否则,夏令时
;CF,0时钟在走,否则,时钟停止
MOV AX,CX ;设置小时,分钟,并覆盖00:00:00中时分
MOV CX,4
LEA SI,TIMEDIS
LA3:
PUSH CX
MOV CL,4
ROL AX,CL
MOV BL,AL
AND BL,0FH
OR BL,30H
MOV [SI],BL
INC SI
POP CX
CMP CX,3 ;跳过00:00中的':'
JNZ P3
INC SI
P3:
LOOP LA3
PUSH DX ;设置秒,并覆盖00:00:00中的最后的秒
MOV CL,4
SHR DH,CL ;DH右移CL
OR DH,30H
MOV TIMEDIS+6,DH ;将DH传送到DIMEDIS+6
POP DX
AND DH,0FH
OR DH,30H
MOV TIMEDIS+7,DH
LEA DX,TIMEDIS ;显示时间
MOV AH,09H
INT 21H
RET ;时间调用后返回
TIMEDISPLAY ENDP code ends
end start