Источник ядра Linux показывает, как выполнить 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 являются входными данными, а все четыре являются выходными), вы можете легко выделить отдельные биты / байты в вызывающей стороне.