Compteur de cycles d'horloge

Description

j'ai découvert dans de la doc l'instruction RDTSC qui permet de lire le nombre de cycles d'horloges écoulés depuis le dernier reset.Cela peut permettre de mesurer la qualité d'un code.Evidemment,les résultats sont variables en fonction du nombre de programmes tournant en arrière plan et qui utilisent aussi des cycles.

Source / Exemple :


;-------- cycle horloge.asm

.586
.model	flat,stdcall
option	casemap:none  

include cycle horloge.inc

INCLUDELIB user32.lib
INCLUDELIB kernel32.lib

Maitre			PROTO	:DWORD
GetModuleHandle TEXTEQU <GetModuleHandleA>
ExitProcess 	PROTO	dwExitCode:DWORD	
GetModuleHandle PROTO	pString:PTR BYTE	

.data
valeur	dword	0

.code
debut:
			invoke	GetModuleHandle,0
			invoke	Maitre,eax
			invoke	ExitProcess,0
			
Maitre	proc	Hdl_GetModuleHandle:dword
	
	
	CC	
	mov valeur,eax
	
	;--------------------------
	;instruction à mesurer en nombre de cycles d'horloge
	
	mov eax,5
A1:	dec eax
	jnz A1
	
	;----------------------------
	
	CC
	sub eax,valeur
	
	AFFdec
	
	
	ret
Maitre	endp

end debut

;--------- cycle horloge.inc

MessageBox 		TEXTEQU <MessageBoxA>
MessageBox 		PROTO :DWORD,:DWORD,:DWORD,:DWORD

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	"nombre de cycles d'horloge écoulés",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

CC	macro

	;rdtsc=read TSC=Time Stamp Counter=compte les cycles
	;d'horloge,renvoie le resultat dans edx:eax
	;=0 au reset
	
.code
	
	rdtsc
	
endm

Codes Sources

A voir également

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.