Advertisement
Gistrec

Ассемблерные побалушки

Apr 23rd, 2019
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. /**
  2.  * Изменение переменной
  3.  */
  4.  
  5. #include <iostream>
  6.  
  7. int main() {
  8.     int var = 0;
  9.  
  10.     __asm {
  11.         mov var, 1
  12.     };
  13.  
  14.     std::cout << var << std::endl;
  15.     system("pause");
  16.     return 0;
  17. }
  18.  
  19.  
  20.  
  21. /**
  22.  * Получение размера кеша процессора
  23.  */
  24. #include <iostream>
  25.  
  26. int main() {
  27.     uint32_t reg;
  28.  
  29.     // Проверить:    wmic cpu get L2CacheSize
  30.     // https://en.wikipedia.org/wiki/CPUID#EAX=80000006h:_Extended_L2_Cache_Features
  31.     __asm {
  32.         // EAX=0x80000002, 0x80000003, 0x80000004 и т.д.
  33.         // Позволяет получить некоторые данные о процессоре
  34.  
  35.         // Для того, чтобы их использовать, нужно проверить поддерживает ли CPU эти команды
  36.         // Поместив в EAX значение 0x80000000 - возвращаемое значение должно быть больше 0x0000006
  37.         //mov       eax, 0x80000000
  38.         //cpuid
  39.  
  40.         // Возвращает данные L2 кеша в ECX
  41.         // Включая размер линии в байтах, типа ассоциативности (кодируется 4 битами) и размер кеша
  42.         //cmp       eax, 0x80000006
  43.         //jl        error
  44.        
  45.         mov     eax, 0x80000006
  46.         cpuid
  47.        
  48.         mov     reg, ecx
  49.     };
  50.  
  51.     std::cout << (int)(reg & 0xff) << std::endl;
  52.     system("pause");
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement