C ++字到字节

时间:2010-03-10 21:02:25

标签: c++ assembly cpuid

我尝试在C ++中使用汇编程序读取CPUID。我知道它有功能,但我想要asm方式。因此,在执行CPUID之后,它应该用ASCII编码的字符串填充eax,ebx,ecx寄存器。但我的问题是,因为我可以在asm地址只有完整或半个eax寄存器,如何将32位分成4个字节。我用过这个:

#include <iostream>
#include <stdlib.h>

int main()
{
_asm
{
cpuid
/*There I need to mov values from eax,ebx and ecx to some propriate variables*/
}
system("PAUSE");
return(0);  
}

2 个答案:

答案 0 :(得分:2)

Linux内核源shows how使用内联汇编执行x86 cpuid。语法是GCC特定的;如果你在Windows上,这可能没有帮助。

static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
                                unsigned int *ecx, unsigned int *edx)
{
        /* ecx is often an input as well as an output. */
        asm volatile("cpuid"
            : "=a" (*eax),
              "=b" (*ebx),
              "=c" (*ecx),
              "=d" (*edx)
            : "0" (*eax), "2" (*ecx));
}

一旦你有这种格式的函数(注意EAX,ECX是输入,而所有四个都是输出),你可以轻松地打破调用者中的各个位/字节。

答案 1 :(得分:0)

我不明白你为什么不使用提供的功能