Advertisement
Guest User

Untitled

a guest
Aug 31st, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. long int antes1, antes2, depois1, depois2, temp;
  7. long long int finalAntes, finalDepois;
  8. unsigned char nome[20];
  9.  
  10. int main( )
  11. {
  12. asm(".intel_syntax noprefix");
  13.  
  14. asm("rdtscp");
  15. asm ("lfence");
  16. 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
  17. asm("mov antes2, %eax");//o edx e o eax sendo que o edx é o mais significativo e o eax o menos significativo
  18.  
  19. asm(".att_syntax noprefix");
  20.  
  21. temp = clock();//atribuo esta instrução da biblioteca time.h para o programa ficar um segundo em espera
  22. printf("%ld\n", temp);//verifico a atribuição
  23. while (1000000 < (clock() - temp)) {
  24.  
  25. }
  26.  
  27. asm(".intel_syntax noprefix");
  28.  
  29. asm("rdtscp");
  30. asm ("lfence");
  31. asm("mov depois1, %edx");
  32. asm("mov depois2, %eax");
  33. ////---- usando cpuid ------/////
  34. asm ("mov %eax, 0");//neste comando chama-se a string do fabricante
  35. asm ("cpuid");//faz o movimento desta string
  36. asm ("mov nome,%ebx"); //parte mais sinificativa da string (se for da Intel ele retorna Genui
  37. asm ("mov [nome+4], %edx");//parte do meio da string(aqui se faz necessário deslocar quatro a posições por causa do \0)
  38. asm ("mov [nome+8], %ecx"); //final da string(aqui se faz necessário deslocar oito a posições por causa do \0)
  39. //obs.: lembrando que no registrador o inicio é no zero daí a razão de mais quatro e oito
  40.  
  41. asm(".att_syntax noprefix");
  42.  
  43. finalAntes = (antes1 * pow(2, 32)) + antes2; //usa-se esta função para retornar o valor dos bits mais significativos, eleva-se 2 a 32
  44. finalDepois = (depois1 * pow(2, 32)) + depois2;//e multiplaca-se por antes1 e ao somarmos com antes2 temos o valor integral do clock carimbado
  45.  
  46. printf("Valor de saida: %lld \n", finalAntes);
  47. printf("Valor de saida: %lld\n", finalDepois);
  48. printf("Valor de saida: %lld \n", finalDepois - finalAntes);
  49. printf("Valor do clock: %lld \n", (finalDepois - finalAntes) * 4);
  50. printf("CPUID: %s", nome);
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement