1

我有一个小班来获取 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)。我尝试禁用不同的 Xorcpuid,但每次都得到相同的结果。

有人可以建议我做错了什么吗?

4

1 回答 1

0

似乎clang不支持以这种方式处理ASM。最后,我只使用了这两个文件中所需的代码。

http://www.opensource.apple.com/source/xnu/xnu-1228.5.20/osfmk/i386/cpuid.h http://www.opensource.apple.com/source/xnu/xnu-1228.5.20 /osfmk/i386/cpuid.c

于 2015-05-06T12:36:02.220 回答