Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- #include <math.h>
- #include <time.h>
- long int antes1, antes2, depois1, depois2, temp;
- long long int finalAntes, finalDepois;
- unsigned char nome[20];
- int main( )
- {
- asm(".intel_syntax noprefix");
- asm("rdtscp");
- asm ("lfence");
- asm("mov antes1, %edx"); //Divide-se em duas variáveis pois a função rdstc usa 64 bits que são dividios em dois registradores
- asm("mov antes2, %eax");//o edx e o eax sendo que o edx é o mais significativo e o eax o menos significativo
- asm(".att_syntax noprefix");
- temp = clock();//atribuo esta instrução da biblioteca time.h para o programa ficar um segundo em espera
- printf("%ld\n", temp);//verifico a atribuição
- while (1000000 < (clock() - temp)) {
- }
- asm(".intel_syntax noprefix");
- asm("rdtscp");
- asm ("lfence");
- asm("mov depois1, %edx");
- asm("mov depois2, %eax");
- ////---- usando cpuid ------/////
- asm ("mov %eax, 0");//neste comando chama-se a string do fabricante
- asm ("cpuid");//faz o movimento desta string
- asm ("mov nome,%ebx"); //parte mais sinificativa da string (se for da Intel ele retorna Genui
- asm ("mov [nome+4], %edx");//parte do meio da string(aqui se faz necessário deslocar quatro a posições por causa do \0)
- asm ("mov [nome+8], %ecx"); //final da string(aqui se faz necessário deslocar oito a posições por causa do \0)
- //obs.: lembrando que no registrador o inicio é no zero daí a razão de mais quatro e oito
- asm(".att_syntax noprefix");
- finalAntes = (antes1 * pow(2, 32)) + antes2; //usa-se esta função para retornar o valor dos bits mais significativos, eleva-se 2 a 32
- finalDepois = (depois1 * pow(2, 32)) + depois2;//e multiplaca-se por antes1 e ao somarmos com antes2 temos o valor integral do clock carimbado
- printf("Valor de saida: %lld \n", finalAntes);
- printf("Valor de saida: %lld\n", finalDepois);
- printf("Valor de saida: %lld \n", finalDepois - finalAntes);
- printf("Valor do clock: %lld \n", (finalDepois - finalAntes) * 4);
- printf("CPUID: %s", nome);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement