CT est une simple macro qui utilise GetLocalTime afin de calculer le
nombre de millisecondes écoulées entre deux appels.Cela permet de voir
le temps mis par le processeur pour effectuer les instructions situées entre les deux appels de CT.
AFFdec affiche le nombre de milisecondes dans un messagebox
Source / Exemple :
compteur temps.asm;
------------------
.586
.model flat,stdcall
option casemap:none
include compte temps.inc
INCLUDELIB user32.lib
INCLUDELIB kernel32.lib
Maitre PROTO :DWORD
GetModuleHandle TEXTEQU <GetModuleHandleA>
ExitProcess PROTO dwExitCode:DWORD
GetModuleHandle PROTO pString:PTR BYTE
.code
debut:
invoke GetModuleHandle,0
invoke Maitre,eax
invoke ExitProcess,0
Maitre proc Hdl_GetModuleHandle:dword
LOCAL depart,arrivee:dword
CT
mov depart,eax
;---------------------
;instruction à chronométrer
mov ecx,100000000
@@:
dec ecx
cmp ecx,0
jnz @b
;--------------------
CT
mov arrivee,eax
mov eax,arrivee
sub eax,depart
AFFdec ;=31 milliseconds
ret
Maitre endp
end debut
-----------------------------------------------------------------
compteur.inc;
------------
SYSTEMTIME STRUCT
wYear WORD ?
wMonth WORD ?
wDayOfWeek WORD ?
wDay WORD ?
wHour WORD ?
wMinute WORD ?
wSecond WORD ?
wMilliseconds WORD ?
SYSTEMTIME ENDS
GetLocalTime PROTO pSystemTime:PTR SYSTEMTIME
MessageBox TEXTEQU <MessageBoxA>
MessageBox PROTO :DWORD,:DWORD,:DWORD,:DWORD
CT macro
;---------------------------------
;calcul le nombre de millisecondes
;écoulées depuis minuit
;sortie: eax contient le nbre de millisecondes
;----------------------------------
LOCAL heure,min,sec
LOCAL sysTime
.data
heure dword ?
min dword ?
sec dword ?
sysTime SYSTEMTIME <>
.code
INVOKE GetLocalTime,addr sysTime
movzx eax,sysTime.wHour
mov ebx,3600
mul ebx
mov heure,eax
movzx eax,sysTime.wMinute
mov ebx,60
mul ebx
mov min,eax
movzx eax,sysTime.wSecond
mov sec,eax
mov eax,heure
add eax,min
add eax,sec
mov ebx,1000 ;milliseconds
mul ebx
movzx ebx,sysTime.wMilliseconds
add eax,ebx
endm
AFFdec macro
;--------------------------
; affiche la valeur entiere
; non signée de eax dans
; un messagebox
;--------------------------
LOCAL stocke,buffer,titre
.data
stocke qword 0
buffer BYTE 12 DUP(30h),0 ;12 caracteres+0 terminal
titre BYTE "temps écoulé en millisecondes",0
.code
mov dword ptr[stocke],eax
mov esi,offset buffer
add esi,11 ;pointe sur dernier caracteres=celui de droite
mov ecx,0
divise:
mov edx,dword ptr stocke+4
mov eax,dword ptr stocke
mov ebx,10
div ebx
mov dword ptr stocke,eax
add edx,30h
mov [esi],dl
dec esi
cmp eax,0
ja divise
;affichage du temps
invoke MessageBox,0,addr buffer,addr titre,0
endm
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.