|
Вопрос # 694/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!Как узнать тип процессора intel pentium или atlon и тд.
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 3 июля 2007, 12:45
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, ММО!
есть два способа. первый заключается в выполнении процессорной инструкции cpuid, которая возвращает 12 байт-строку. В этой строке производитель кодирует имя процессора. пример в приложении.
У меня на pentium'e выдаёт строку 'GenuineIntel'. Прийдётся насобирать статистику.
Если всё таки хочеться большего - загляните на страничку http://www.lohninger.com/cpuid.html.
Приложение: Переключить в обычный режим-
-
-
-
- ***************************************************** }
- type
- TVendor = array[0..11] of char;
-
- .........................
-
- function GetCPUVendor: TVendor; assembler; register;
- asm
- PUSH EBX {Save affected register}
- PUSH EDI
- MOV EDI,EAX {@Result (TVendor)}
- MOV EAX,0
- DW $A20F {CPUID Command}
- MOV EAX,EBX
- XCHG EBX,ECX {save ECX result}
- MOV ECX,4
- @1:
- STOSB
- SHR EAX,8
- LOOP @1
- MOV EAX,EDX
- MOV ECX,4
- @2:
- STOSB
- SHR EAX,8
- LOOP @2
- MOV EAX,EBX
- MOV ECX,4
- @3:
- STOSB
- SHR EAX,8
- LOOP @3
- POP EDI {Restore registers}
- POP EBX
- end;
-
-
- procedure .....
- var s:string;
- begin
- s:=GetCPUVendor;
- ShowMessage(s);
- 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
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- var
-
-
-
-
-
-
- cpuAPIC : DWORD; //
- begin
- GetMem(cpuId, 12);
- asm
- PUSH EBX
- PUSH EDI
-
- XOR EAX,EAX // eax <- 0
-
- MOV EAX, cpuId
- MOV [EAX], EBX
- MOV [EAX+4], EDX
- MOV [EAX+8], ECX
-
-
-
-
-
- XOR EAX,EAX
- INC EAX // eax <- 1
- CPUID
-
- AND ECX, 00000000000000000000000000001111b
- MOV cpuStepping, ECX
-
- AND ECX, 00000000000000000000000011110000b
- SHR ECX, 4
- MOV cpuModel, ECX
-
- AND ECX, 00000000000000000000111100000000b
- SHR ECX, 8
- MOV cpuFamily, ECX
-
- AND ECX, 00000000000000000011000000000000b
- SHR ECX, 12
- MOV cpuType, ECX
-
- AND ECX, 00000000000000000000000011111111b
- MOV cpuBrandIndex, ECX
-
- AND ECX, 11111111000000000000000000000000b
- SHR ECX, 24
- MOV cpuAPIC, ECX
- POP EDI
- POP EBX
- end;
- Memo1.Lines.Clear;
- with Memo1.Lines do
- begin
-
-
-
-
-
-
-
- end;
- FreeMem(cpuId, 12);
- end;
Мини-форум вопроса
Всего сообщений: 0.
31 января 2011, 19:27: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|