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
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.