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
; Attention a besoin d'autres procédures pour fonctionner, voir posts plus anciens
Debug DayOfWeekAsm(2000, 1, 1, 1) ;Y.l, M.l, D.l, Gregorian.l
Debug DayOfWeek(Date(2000, 1, 1, 0, 0, 0))
Debug DayOfWeekAsm(2001, 1, 1, 1) ;Y.l, M.l, D.l, Gregorian.l
Debug DayOfWeek(Date(2001, 1, 1, 0, 0, 0))