Lecture de cpuid

Description

utilisation de l'instruction CPUID pour connaitre les caractéristiques du processeurs (constructeur,extensions supportées,...)

Source / Exemple :


la boucle principale ;
-----------------------

lea eax,constructeur
	mov edi,eax
	xor eax,eax
	cpuid
	mov [edi+16],ebx     
    	mov [edi+20],edx
    	mov [edi+24],ecx
    	invoke lstrcat,offset buff,offset constructeur
    	invoke lstrcat,offset buff,offset RL
    
    ;contenu de ECX
    
    	mov compteur,16
    	lea eax,TAB
    	mov edi,eax
@@:
    	invoke CPUID_TEST,1,[edi],[edi+4],[edi+8],1
   		add edi,12
   		dec compteur
   		jnz @b 
   			
   	;contenu de EDX
   	
  		mov compteur,8
   		lea eax,TAB1
   		mov edi,eax
@@:
		invoke CPUID_TEST,1,[edi],[edi+4],[edi+8],2
   		add edi,12
   		dec compteur
   		jnz @b 
		
		invoke SetDlgItemText,hWin,IDC_EDT1,addr buff

la routine CPUID_TEST;
---------------------

CPUID_TEST	proc	uses eax ecx num:dword,bit:dword,msgTRUE:dword,msgFALSE:dword,REG:dword
	
	;num: 		n° de la fonction passée à CPUID
	;bit: 		bit à tester par un AND
	;msgTRUE: 	pointeur sur le message TRUE  
	;msgFALSE: 	pointeur sur le message FALSE
	;REG: registre à étudier 1=ECX 2=EDX
	
	mov eax,num
	cpuid  
	  
		.if REG==1
			push ecx
			and ecx,bit
		.elseif	REG==2
			push edx
			and edx,bit
		.endif	
			
	jz bit_desarme
	invoke lstrcat,offset buff,msgTRUE 
	jmp @f
	
bit_desarme:
		invoke lstrcat,offset buff,msgFALSE
@@:
		invoke lstrcat,offset buff,offset RL
		
		.IF REG==1
			pop ecx
		.ELSEIF REG==2
			pop edx
		.endif
			
	ret

CPUID_TEST endp

le data bla bla;
---------------

cf CPUID3.inc

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.