DayOfWeekAsm (pour archive)

Pour discuter de l'assembleur
Mesa
Messages : 1092
Inscription : mer. 14/sept./2011 16:59

DayOfWeekAsm (pour archive)

Message par Mesa »

Code : Tout sélectionner

; DWORD DayOfWeek(DWORD Y, DWORD M, DWORD D, DWORD Gregorian)
;
; This function calculates the day of the week for the given date. Each day of the week is identified by number:
; 0 - Sunday, 1 - Monday, 2 - Tuesday, 3 - Wednesday, 4 - Thursday, 5 - Friday, 6 - Saturday.
;
; Parameters:
;	Y - year,
;	M - month,
;	D - day,
;	Gregorian - chosen calendar (0 - Julian, 1 - Gregorian).
;
; Returned values:
;	* 0, 1, ..., 6 if the date is valid,
;	* -1 for the invalid parameters.

Procedure.l DayOfWeekAsm(Y.l, M.l, D.l, Gregorian.l)
  EnableASM 
; 	PUSHFD
; 	PUSH	ebx edx

DateToAbsDayNum(Y, M, D, Gregorian)

  TEST	eax, eax
	JZ	l_dayofweekasm_error

	MOV	ecx, 7							;
	XOR	edx, edx						;
	ADD	eax, 5							; edx := (eax + 5) mod 7 = (N + 5) mod 7
	ADC	edx, edx						;
	DIV	ecx							

	XCHG	eax, edx					; eax := edx
	JMP	l_dayofweekasm_theend

	error:
		MOV	eax, -1
		theend:
		
		DisableASM
		ProcedureReturn
		
; 	POP	edx ebx
; 	POPFD

EndProcedure
M.