Salut,
Pour ça il faut utiliser un compteur.
ToutEnMasm
.586
;------------------- constantes ---------------------------
ITER EQU 1 ; number of iterations
OVERHEAD EQU 15 ; 15 for PPlain, 17 for PMMX
;************ Data segment: ********************
ALIGN 4
COUNTER DD 0 ; loop counter
TICS DD 0 ; temporary storage of clock
RESULTLIST DD ITER DUP (0) ; list of test results
;---------------------- code -----------------------------------
;calcul du temps
BEGIN:
MOV DWORD ptr COUNTER,0 ; reset loop counter
TESTLOOP: ; test loop
;************ Do any initializations here: ********************
FINIT
;************ End of initializations ********************
RDTSC ; read clock counter
MOV TICS,EAX ; save count
CLD ; non-pairable filler
REPEAT 8
NOP ; eight NOP's to avoid shadowing effect
ENDM
;---------------- bloc d'instruction ------------------------
;---------- resultat --------------------------
CLC ; non-pairable filler with shadow
RDTSC ; read counter again
SUB EAX,TICS ; compute difference
SUB EAX,OVERHEAD ;15 subtract clocks used by fillers etc.
MOV EDX,COUNTER ; loop counter
MOV [RESULTLIST+EDX],EAX ; store result in table
ADD EDX,TYPE RESULTLIST ; increment counter
MOV COUNTER,EDX ; store counter
CMP EDX,ITER * (TYPE RESULTLIST)
JB @F ; repeat ITER times
jmp AfficheITER
@@:
jmp TESTLOOP
;affichage
AfficheITER:
mov CPT,ITER
mov ebx,0
mov al,0
mov byte ptr [ZoneMessagesErreurs],al
.while(CPT)
mov edx,[RESULTLIST+ebx*4]
invoke dwtoa,edx,addr buffer
invoke lstrcat,addr ZoneMessagesErreurs,addr buffer
invoke lstrcat,addr ZoneMessagesErreurs,SADR(" ")
inc ebx
dec CPT
.endw
invoke MessageBox,NULL,addr ZoneMessagesErreurs,addr buffer,MB_OK