STACK SEGMENT PARA STACK'STACK'
DB 150 DUP(?)
STACK ENDS
DATA SEGMENT
BUFFER DB 3 DUP(?)
DATA1 DB 1 DUP(?)
DATA2 DB 1 DUP(?)
DATA3 DB 1 DUP(?)
TITLE1 DB ' SUN MON TUE WED THU FRI SAT$'
TITLE2 DB 'Month(01-12):$'
TITLE3 DB 'TotalDays(00-99):$'
TITLE4 DB 'Firstday(00-06):$'
TITLE5 DB 'Month $'
TITLE6 DB 'error!$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START PROC NEAR
BEGIN:
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
CALL TITLE2_OUT
LEA DI,DATA1
CALL INPUT
MOV [DI],BX
CALL LFRC
CALL TITLE3_OUT
LEA DI,DATA2
CALL INPUT
MOV [DI],BX
CALL LFRC
CALL TITLE4_OUT
LEA DI,DATA3
CALL INPUT
MOV [DI],BX
CALL LFRC
CALL CHECK_ERROR
CALL DEC1
CALL LFRC
CALL LFRC
CALL MONTH_OUT
CALL LFRC
CALL TITLE1_OUT
CALL LFRC
CALL OUTPUT_1
MAINPROC:
MOV AL,0
MOV BL,0
MOV SI,0
LEA SI,BUFFER
PUSH BX
GOON: CALL NUL_OUT
POP BX
MOV AL,BL
INC AL
DAA
CMP AL,DATA2
JNAE NEXT
JE NEXT
JAE DONE
MOV AL,0
NEXT:
MOV BL,AL
PUSH BX
PUSH CX
CALL CHAR_EX
CALL DELAY
POP CX
CMP CX,0
JE L1
DEC CX
JZ L1
JMP L2
L1: MOV CX,7
CALL LFRC
L2: MOV SI,OFFSET BUFFER
JMP GOON
DONE: CALL LFRC
CALL LFRC
MOV AH,4CH
INT 21H
START ENDP
LFRC PROC NEAR
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
RET
LFRC ENDP
INPUT PROC NEAR
PUSHF
PUSH CX
MOV BX,0
MOV AH,1
INT 21H
AND AL,0FH
MOV CL,4
SHL AL,CL
MOV BL,AL
MOV AH,1
INT 21H
AND AL,0FH
ADD BL,AL