|
こんばんは。
WinRing0 のソ〜スを見ていて気になったことが1つありました。
CPUID の判定は命令非サポ〜トの Exception をハンドリングしているようですが
フラグレジスタのビット21が書き換えれるかどうかでチェックすることができます。
これは、Intel の正式ドキュメントにも記述があるようです。
↓こんな感じ。
int CheckCPUID(void)
{
unsigned long fregs;
asm{
.386
pushfd
pushfd
pop eax
or eax,200000h
push eax
popfd
pushfd
pop eax
popfd
nop
nop
mov DWORD PTR [fregs],eax
}
// bit 21 == 1 なら CPUID 命令が使用可能
return((fregs&0x200000)>>21);
}
現状では486DX以前とP5クラスの互換CPUでしか意味を持ちませんが…(^_^;
ではでは。
|
|