У меня есть небольшой класс для получения информации о CpuID. Внутри конструктора класса у меня есть встроенная функция, использующая код asm для получения информации cpuid. Он отлично работает в Windows и отлично работает в Xcode 3, но теперь сам класс уничтожается.
Вот начало функции:
inline void CCPUDetector::_DetectCPU()
{
char lvendor[13] = "UnknownVendr";
unsigned int lfamily;
unsigned int lmodel;
unsigned int lstepping;
unsigned int lfeatures = 0;
unsigned int lBasicInfo = 0;
uint32_t cpu_cores = 0;
uint32_t cpu_count = 1;
unsigned int signature = 0;
// Step 1: check if a processor supports CPUID instruction
// ============================================================
try
{
__asm
{
// Reset all registers
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
// Call CPUID with eax register == 0
cpuid
};
}
// Old processors that do not support cpuid will throw exception
// which is caught in the command below "__except"
catch(...)
{
return;
}
}
После блока __asm сам класс CPUDetector, тот, в котором я нахожусь в его конструкторе, становится недействительным (NULL). Я пытался отключить разные Xor или cpuid, но каждый раз получал одни и те же результаты.
Может кто-нибудь подсказать, что я делаю не так?
eax
,ebx
,ecx
иedx
. В противном случае он может использовать один из них для чего-то самого важного ... См. Этот ответ с образцом кода. - person Jester   schedule 03.05.2015