Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 694

/ вопрос решён /

Здравствуйте, уважаемые эксперты!Как узнать тип процессора intel pentium или atlon и тд.

Аксион Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 3 июля 2007, 12:45
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, ММО!
есть два способа. первый заключается в выполнении процессорной инструкции cpuid, которая возвращает 12 байт-строку. В этой строке производитель кодирует имя процессора. пример в приложении.
У меня на pentium'e выдаёт строку 'GenuineIntel'. Прийдётся насобирать статистику.
Если всё таки хочеться большего - загляните на страничку http://www.lohninger.com/cpuid.html.

Приложение:
  1.  
  2.  
  3.  
  4.  
  5. ***************************************************** }
  6. type
  7. TVendor = array[0..11] of char;
  8.  
  9. .........................
  10.  
  11. function GetCPUVendor: TVendor; assembler; register;
  12. asm
  13. PUSH EBX {Save affected register}
  14. PUSH EDI
  15. MOV EDI,EAX {@Result (TVendor)}
  16. MOV EAX,0
  17. DW $A20F {CPUID Command}
  18. MOV EAX,EBX
  19. XCHG EBX,ECX {save ECX result}
  20. MOV ECX,4
  21. @1:
  22. STOSB
  23. SHR EAX,8
  24. LOOP @1
  25. MOV EAX,EDX
  26. MOV ECX,4
  27. @2:
  28. STOSB
  29. SHR EAX,8
  30. LOOP @2
  31. MOV EAX,EBX
  32. MOV ECX,4
  33. @3:
  34. STOSB
  35. SHR EAX,8
  36. LOOP @3
  37. POP EDI {Restore registers}
  38. POP EBX
  39. end;
  40.  
  41.  
  42. procedure .....
  43. var s:string;
  44. begin
  45. s:=GetCPUVendor;
  46. ShowMessage(s);
  47. end;


Ответ отправил: Вадим К (статус: Академик)
Время отправки: 3 июля 2007, 13:07
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, ММО!
Для определения параметров процессора используется команда CPUID, только сама эта команда появилась только у Пентиумов (затем у AMD), поэтому перед использованием неплохо бы проверить поддерживается ли вообще эта команда. CPUID поддерживается если 21 бит EFLAGS доступен для изменений.

Сама же CPUID возвращает различную информацию в зависимости от значения EAX: 0 - Метку производителя, 1 - Модель, семейство, а также поддерживаемые расширения архитектуры. И так далее.

В приложении наскоро написанная функция, получающая метку производителя и кое-какую информацию о процессоре (не всю). В этой процедуре значительно легче разобраться.

И еще очень рекомендую прочитать статью Определение конфигурации на аппаратном уровне.
Cм. http://www.wasm.ru/article.php?article=hardzen

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9. cpuAPIC : DWORD; //
  10. begin
  11. GetMem(cpuId, 12);
  12. asm
  13. PUSH EBX
  14. PUSH EDI
  15.  
  16. XOR EAX,EAX // eax <- 0
  17.  
  18. MOV EAX, cpuId
  19. MOV [EAX], EBX
  20. MOV [EAX+4], EDX
  21. MOV [EAX+8], ECX
  22.  
  23.  
  24.  
  25.  
  26.  
  27. XOR EAX,EAX
  28. INC EAX // eax <- 1
  29. CPUID
  30.  
  31. AND ECX, 00000000000000000000000000001111b
  32. MOV cpuStepping, ECX
  33.  
  34. AND ECX, 00000000000000000000000011110000b
  35. SHR ECX, 4
  36. MOV cpuModel, ECX
  37.  
  38. AND ECX, 00000000000000000000111100000000b
  39. SHR ECX, 8
  40. MOV cpuFamily, ECX
  41.  
  42. AND ECX, 00000000000000000011000000000000b
  43. SHR ECX, 12
  44. MOV cpuType, ECX
  45.  
  46. AND ECX, 00000000000000000000000011111111b
  47. MOV cpuBrandIndex, ECX
  48.  
  49. AND ECX, 11111111000000000000000000000000b
  50. SHR ECX, 24
  51. MOV cpuAPIC, ECX
  52. POP EDI
  53. POP EBX
  54. end;
  55. Memo1.Lines.Clear;
  56. with Memo1.Lines do
  57. begin
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65. end;
  66. FreeMem(cpuId, 12);
  67. end;


Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 3 июля 2007, 14:20
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 0.

31 января 2011, 19:27: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.03 сек.