📄 lxt.asm
字号:
DATA SEGMENT
YEAR DW ?
MONTH DB ?
DAY DB ?
YEAR1 DW ?
MONTH1 DB ?
DAY1 DB ?
ME DB 'ERROR!$'
BREAK DB 0DH,0AH,'$'
M1 DB 'TODAY IS MONDAY ',0AH,0DH,'$'
M2 DB 'TODAY IS TUESDAY ',0AH,0DH,'$'
M3 DB 'TODAY IS WEDNESDAY ',0AH,0DH,'$'
M4 DB 'TODAY IS THURSDAY ',0AH,0DH,'$'
M5 DB 'TODAY IS FRIDAY ',0AH,0DH,'$'
M6 DB 'TODAY IS SATURDAY ',0AH,0DH,'$'
M0 DB 'TODAY IS SUNDAY ',0AH,0DH,'$'
MY DB 'PLEASE INPUT YEAR:$'
MM DB 'PLEASE INPUT MONTH:$'
MD DB 'PLEASE INPUT DAY:$'
DATA ENDS
STACK1 SEGMENT PARA 'STACK'
DB 128 DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START:
MOV AX,DATA
MOV DS,AX
LAB:
MOV DX,OFFSET MY ; 输入年数
MOV AH,09H
INT 21H
CALL INBX
MOV DX,OFFSET BREAK
MOV AH,09H
INT 21H
MOV YEAR,BX
MOV DX,OFFSET MM ;输入月数
MOV AH,09H
INT 21H
CALL INBX
MOV DX,OFFSET BREAK
MOV AH,09H
INT 21H
MOV MONTH,BL
CMP MONTH,12
JA ER
MOV DX,OFFSET MD ; 输入日数
MOV AH,09H
INT 21H
CALL INBX
MOV DAY,BL
CMP MONTH,1
JZ L1
CMP MONTH,3
JZ L1
CMP MONTH,5
JZ L1
CMP MONTH,7
JZ L1
CMP MONTH,8
JZ L1
CMP MONTH,10
JZ L1
CMP MONTH,12
JZ L1
CMP MONTH,4
JZ L2
CMP MONTH,6
JZ L2
CMP MONTH,9
JZ L2
CMP MONTH,11
JZ L2
CMP MONTH,2
JZ L3
L1:
CMP DAY,31
JA ER
JMP NEXT
L2:
CMP DAY,30
JA ER
JMP NEXT
L3:
MOV AX,YEAR ;判断是不是闰年
CWD
MOV CX,400
DIV CX
AND DX,0FFH
CMP DX,0
JZ L6
;JNZ L5
MOV AX,YEAR
CWD
MOV CX,4
DIV CX
AND DX,0FFH
CMP DX,0
JNZ L5
L4:
MOV AX,YEAR
CWD
MOV CX,100
DIV CX
AND DX,0FFH
CMP DX,0
JNZ L6
L5:
CMP DAY,28
JA ER
JMP NEXT
L6:
CMP DAY,29
JA ER
JMP NEXT
ER: MOV DX,OFFSET ME
MOV AH,09H
INT 21H
JMP LAB
NEXT:
MOV DX,OFFSET BREAK
MOV AH,09H
INT 21H
MOV AH,2AH ;保存系统的当前日期
INT 21H
MOV YEAR1,CX
MOV MONTH1,DH
MOV DAY1,DL
MOV CX,YEAR ;修改系统日期
MOV DH,MONTH
MOV DL,DAY
MOV AH,2BH
INT 21H
MOV AH,2AH
INT 21H
AND AL,0FH
CMP AL,1
JZ L11
CMP AL,2
JZ L21
CMP AL,3
JZ L31
CMP AL,4
JZ L41
CMP AL,5
JZ L51
CMP AL,6
JZ L61
CMP AL,0
JZ L01
L11:
MOV DX,OFFSET M1 ;显示星期信息
JMP EXIT2
L21:
MOV DX,OFFSET M2
JMP EXIT2
L31:
MOV DX,OFFSET M3
JMP EXIT2
L41:
MOV DX,OFFSET M4
JMP EXIT2
L51:
MOV DX,OFFSET M5
JMP EXIT2
L61:
MOV DX,OFFSET M6
JMP EXIT2
L01:
MOV DX,OFFSET M0
EXIT2:
MOV AH,09H
INT 21H
MOV AH,2BH ;系统时间还原
MOV CX,YEAR1
MOV DH,MONTH1
MOV DL,DAY1
MOV AH,2BH
INT 21H
MOV AH,4CH
INT 21h
; 子程序名:INBX
; 功能:从键盘输入数字
; 入口参数:从键盘输入的数字
; 出口参数:键盘输入的日期记录在BX中
INBX proc NEAR
PUSH AX
PUSH CX
PUSH DX
XOR BX,BX
mov DH, 0AH
CLD
NEXT1:
MOV AX,0800H
INT 21H
CMP AL,30H
JB EXIT
CMP AL,39H
JA EXIT
mov DL,AL
MOV AX,0200H
INT 21H
mov AX,BX
MUL DH
MOV BX,AX
SUB DL,30H
ADD BL,DL
ADC BH,00H
JMP NEXT1
EXIT:
POP DX
POP CX
POP AX
RET
INBX endp
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -