· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› CPUiD

Посл.отвђт Сообщенiе


Дата: Июн 14, 2004 10:10:58

Здравствуйте!
Прочёл статью "Определение конфигурации на аппаратном уровне"
(Спасибо автору за интересный материал. ;) и решил написать свою программу для определения CPUID для Windows. Я раскопал очень интересный пример от Chris Dragan, где показаны многие приёмы получения различных характеристик процессора. Вопрос такой: как можно получить имя процессора,(например Celeron II)? В исходном коде вышеуказанного автора есть такая фича, как определение имени по Vendor, но исходный код написан
под TASM (Ideal mode) и некоторые фрагменты мне непонятны.
Подскажите, пожалуйста, исходником для MASM как можно получить имя процессора. (Может быть есть какие-то другие возможности
получения имени?)
P.S. В книге В.И. Юрова в описании команды CPUID есть значения
битов 4..7 и 8..11 регистра eax при:
xor eax, eax
inc eax
cpuid
но можно получить только тип процессора, но этого не достаточно
для получения точной информации.
Заранее благодарен!
1990


Дата: Июн 14, 2004 10:53:02


Дата: Июн 14, 2004 11:41:23 · Поправил: 1990

Asterix
Спасибо!


Дата: Июн 15, 2004 19:55:41

Очень хорошая дока по CPUID: http://www.paradicesoftware.com/specs/cpuid/index.htm
Описано определение не только Intel и AMD процов, но и Cyrix, NexGen, Centaur и других x86 совместимых.


Дата: Июн 15, 2004 22:55:16

coban2k
Спасибо! Однако я никак не могу понять, как сравнить установленные биты в eax после inc eax cpuid. Подскажите, плиз, реальный пример - всё теорию я уяснил. ;)


Дата: Июн 16, 2004 19:33:02 · Поправил: 1990

Извините, что снова спрашиваю, но никак не могу понять, что нужно сделать, чтобы прочесть злосчастные установленные байты.


Дата: Июн 16, 2004 19:38:09

www.agner.org/assem/asmlib.zip

Файл - cpuid.asm.


Дата: Июн 16, 2004 20:14:42 · Поправил: Asterix

1990
Я тебе ссылку дал, там в топике есть ссылки на мануалы интела или AMD, в них всё описано и приведены примеры на асме и С/C++, разве недостаточно?


Дата: Июн 17, 2004 09:01:12 · Поправил: 1990

Asterix
Я прошёлся по ссылкам и взял кое-что из исходников, но я никак не могу, как сравнить с такого-то по такой-то байты.
Ещё раз спасибо! Благодаря ссылке я смог расширить базу процессоров.

volodya
Большое спасибо! Всё врубился, как осуществляется проверка.


Дата: Окт 8, 2004 11:01:50

Еще вопросик:
А если процессоров больше одного, как определить их количество?


Дата: Окт 8, 2004 12:28:57

typedef struct _SYSTEM_INFO {
   union {
      DWORD dwOemId;
      struct {
         WORD wProcessorArchitecture;
         WORD wReserved;
      };
  };
  DWORD dwPageSize;
  LPVOID lpMinimumApplicationAddress;
  LPVOID lpMaximumApplicationAddress;
  DWORD_PTR dwActiveProcessorMask;
  DWORD dwNumberOfProcessors;
  DWORD dwProcessorType;
  DWORD dwAllocationGranularity;
  WORD wProcessorLevel;
  WORD wProcessorRevision;
} SYSTEM_INFO;

SYSTEM_INFO si;

GetSystemInfo( &si );



или под NT+
typedef struct _SYSTEM_BASIC_INFORMATION { //Information Class 0
	ULONG Unknown;
	ULONG MaximumIncrement;	
	ULONG PhysicalPageSize;
	ULONG NumberOfPhysicalPages;
	ULONG LowestPhysicalPage;
	ULONG HighestPhysicalPage;
	ULONG AllocationGranularity;
	ULONG LowestUserAddress;
	ULONG HighestUserAddress;
	ULONG ActiveProcessors;
	UCHAR NumberProcessors;
}SYSTEM_BASIC_INFORMATION,*PSYSTEM_BASIC_INFORMATION;

SYSTEM_BASIC_INFORMATION sbi;

NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), NULL );


В драйвере можно просто прочитать экспортируемую переменную KeNumberProcessors.


Дата: Окт 18, 2004 11:21:47 · Поправил: Lord

Я немного знаю, но кажись это только с использованием средств ОС.
А если без ОС'и?


Дата: Окт 18, 2004 16:47:16

а если без оси - то во втором томе интела расписана процедура.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.042