CODE	SEGMENT
	ASSUME	CS:CODE,SS:STACK

START:	MOV	AX,DATA
	MOV	ES,AX
	ASSUME	ES:DATA
	MOV	DI,OFFSET W
	MOV	SI,80H
	CLD
	MOV	AL,-1
	STOSB
	LODSB
	CBW
	MOV	DX,SI
	ADD	DX,AX
ARGLP:	CALL	ARGREAD
	CMP	AL,' '
	JE	ARGLP
ARGLPY:	CALL	ARGDIG
	JC	ARGERR
	XCHG	AL,AH
	STOSB
	XCHG	AL,AH
	CMP	AL,','
	JNE	ARGLPY
	MOV	AL,-1
	STOSB
	CALL	ARGREAD
ARGLPM:	CALL	ARGDIG
	JC	ARGERR
	XCHG	AL,AH
	STOSB
	XCHG	AL,AH
	CMP	AL,0
	JNE	ARGLPM
	MOV	AX,DATA
	MOV	DS,AX
	ASSUME	DS:DATA
	DEC	DI
	MOV	SI,DI
	STD
	MOV	MONTHE,DI
	CALL	PACK
	MOV	YEARE,DI
	CALL	PACK
	MOV	HEAD,DI
	MOV	AX,MONTHE
	SUB	AX,YEARE
	CMP	AX,2
	JE	ARGOK
ARGERR:	MOV	AX,DATA
	MOV	DS,AX
	MOV	DX,OFFSET MARGERR
	MOV	AH,9
	INT	21H
	MOV	AX,4C01H
	INT	21H
ARGOK:	MOV	DI,YEARE
	DEC	DI
	CMP	BYTE PTR [DI],-1
	JNE	YEAR2
	MOV	BYTE PTR [DI],0
YEAR2:	MOV	SI,MONTHE
	MOV	AL,[SI]
	CMP	AL,1
	JB	ARGERR
	CMP	AL,12H
	JA	ARGERR
	ADD	AL,1
	DAA
	MOV	DX,[DI]
	CALL	WEEK
	MOV	BL,AL
	MOV	AL,[SI]
	MOV	DX,[DI]
	CALL	WEEK
	MOV	BH,1
	SUB	BH,AL
	MOV	DX,OFFSET HDR
	MOV	AH,9
	INT	21H
	MOV	CH,6
WEEKL:	MOV	CL,0
DAYL:	CMP	BH,28
	JLE	NOTEN
	CMP	BL,CL
	JNE	NOTEN
	MOV	BH,-13
NOTEN:	MOV	DI,OFFSET BUF+1
	CLD
	MOV	AL,' '
	STOSB
	STOSB
	CMP	BH,1
	JL	NOTBE
	MOV	AL,BH
	AAM
	XCHG	AL,AH
	CMP	AL,0
	JNE	DIG2
	SUB	AX,10H
DIG2:	ADD	AX,3030H
	MOV	[DI-2],AX
NOTBE:	MOV	DX,OFFSET BUF
	MOV	AH,9
	INT	21H
	INC	BH
	INC	CL
	CMP	CL,7
	JB	DAYL
	MOV	DX,OFFSET CRLF
	MOV	AH,9
	INT	21H
	DEC	CH
	JNE	WEEKL
	MOV	AX,4C00H
	INT	21H

ARGREAD	PROC
	MOV	AL,0
	CMP	SI,DX
	JE	ARGEN
	LODSB
ARGEN:	RET
ARGREAD	ENDP	

ARGDIG	PROC
	CMP	AL,'0'
	JB	NOTDIG
	CMP	AL,'9'
	JA	NOTDIG
	SUB	AL,'0'
	MOV	AH,AL
	CALL	ARGREAD
	CLC
	RET
NOTDIG:	STC
	RET
ARGDIG	ENDP

PACK	PROC
	LODSB
	CMP	AL,-1
	JE	PACKE
	STOSB
	LODSB
	CMP	AL,-1
	JE	PACKE
	SHL	AL,1
	SHL	AL,1
	SHL	AL,1
	SHL	AL,1
	OR	[DI+1],AL
	JMP	PACK
PACKE:	STOSB
	RET
PACK	ENDP

WEEK	PROC
	CMP	AL,3
	JNB	WEEK_1
	ADD	AL,12H
	XCHG	AX,CX
	MOV	AL,DH
	ADD	AL,99H
	DAA
	MOV	DH,AL
	MOV	AL,DL
	ADC	AL,3
	DAA
	MOV	DL,AL
	XCHG	AX,CX
WEEK_1:	SUB	AL,3
	DAS
	AND	DL,1FH
	TEST	DL,10H
	JE	WEEK_2
	AND	DL,0FH
	ADD	DL,10
WEEK_2:	AND	DL,3
	CMP	AL,10H
	JB	WEEK_3
	AND	AL,0FH
	ADD	AL,10
WEEK_3:	MOV	AH,26
	MUL	AH
	ADD	AX,5
	MOV	CL,10
	DIV	CL
	ADD	AL,3
	CBW
	PUSH	AX
	MOV	AL,DH
	MOV	AH,AL
	SHR	AH,1
	SHR	AH,1
	SHR	AH,1
	SHR	AH,1
	AND	AL,0FH
	AAD
	MOV	CX,AX
	MOV	AL,100
	MUL	DL
	ADD	CX,AX
	MOV	AX,CX
	MOV	DH,0
	SUB	CX,DX
	SHR	AX,1
	SHR	AX,1
	ADD	CX,AX
	POP	AX
	ADD	AX,CX
	MOV	CX,7
	XOR	DX,DX
	DIV	CX
	MOV	AL,DL
	RET
WEEK	ENDP

CODE	ENDS

DATA	SEGMENT
MARGERR	DB	'Bad parameter',13,10,'$'
HDR	DB	'Sun Mon Tue Wed Thu Fri Sat'
CRLF	DB	13,10,'$'
BUF	DB	'    $'
W	DB	128 DUP(?)
MONTHE	DW	?
YEARE	DW	?
HEAD	DW	?
DATA	ENDS

STACK	SEGMENT	STACK
	DB	256 DUP (?)
STACK	ENDS
	END	START
