取CPU信息

總共有兩種方式,原理都是一樣,只是一種沒整合,一種整合成函數了.

 

第一種沒整合過的:

int _tmain(int argc, _TCHAR* argv[])
{

	char buf[256];
	int  a, b, c, d;

	_asm {
		mov eax, 80000002h
			cpuid
			mov a, eax
			mov b, ebx
			mov c, ecx
			mov d, edx
	}

	buf[0] = a & 0xff;
	buf[1] = (a & 0xffff) >> 8;
	buf[2] = (a >> 16) & 0xff;
	buf[3] = a >> 24;

	buf[4] = b & 0xff;
	buf[5] = (b & 0xffff) >> 8;
	buf[6] = (b >> 16) & 0xff;
	buf[7] = b >> 24;

	buf[8] = c & 0xff;
	buf[9] = (c & 0xffff) >> 8;
	buf[10] = (c >> 16) & 0xff;
	buf[11] = c >> 24;

	buf[12] = d & 0xff;
	buf[13] = (d & 0xffff) >> 8;
	buf[14] = (d >> 16) & 0xff;
	buf[15] = d >> 24;

	_asm {
		mov eax, 80000003h
			cpuid
			mov a, eax
			mov b, ebx
			mov c, ecx
			mov d, edx
	}

	int i = 16;
	buf[i+0] = a & 0xff;
	buf[i+1] = (a & 0xffff) >> 8;
	buf[i+2] = (a >> 16) & 0xff;
	buf[i+3] = a >> 24;

	buf[i+4] = b & 0xff;
	buf[i+5] = (b & 0xffff) >> 8;
	buf[i+6] = (b >> 16) & 0xff;
	buf[i+7] = b >> 24;

	buf[i+8] = c & 0xff;
	buf[i+9] = (c & 0xffff) >> 8;
	buf[i+10] = (c >> 16) & 0xff;
	buf[i+11] = c >> 24;

	buf[i+12] = d & 0xff;
	buf[i+13] = (d & 0xffff) >> 8;
	buf[i+14] = (d >> 16) & 0xff;
	buf[i+15] = d >> 24;

	_asm {
		mov eax, 80000004h
			cpuid
			mov a, eax
			mov b, ebx
			mov c, ecx
			mov d, edx
	}

	i = 32;
	buf[i+0] = a & 0xff;
	buf[i+1] = (a & 0xffff) >> 8;
	buf[i+2] = (a >> 16) & 0xff;
	buf[i+3] = a >> 24;

	buf[i+4] = b & 0xff;
	buf[i+5] = (b & 0xffff) >> 8;
	buf[i+6] = (b >> 16) & 0xff;
	buf[i+7] = b >> 24;

	buf[i+8] = c & 0xff;
	buf[i+9] = (c & 0xffff) >> 8;
	buf[i+10] = (c >> 16) & 0xff;
	buf[i+11] = c >> 24;

	buf[i+12] = d & 0xff;
	buf[i+13] = (d & 0xffff) >> 8;
	buf[i+14] = (d >> 16) & 0xff;
	buf[i+15] = d >> 24;


	
	return 0;
} 

 

第二種經過整合以後的:

void GetCPUInfo(int cpuinfo[4],int tp)
{
	__asm
	{
			MOV eax,tp
			cpuid
			MOV edi,cpuinfo
			MOV dword ptr[edi],eax
			MOV dword ptr[edi+4],ebx
			MOV dword ptr[edi+8],ecx
			MOV dword ptr[edi+12],edx
	}

}

int main(int argc, _TCHAR* argv[])
{
	char cpuName[64]={0};
	int  (*pTmp)[4] = (int(*)[4])cpuName;
	GetCPUInfo(*pTmp++, 0x80000002);
	GetCPUInfo(*pTmp++, 0x80000003);
	GetCPUInfo(*pTmp++, 0x80000004);
	return 0;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章