2010/8/22:本掲示板は閲覧専用です。データが一部破損しておりますがご了承ください。
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃ホーム  
177 / 2351 ←次へ | 前へ→

【2201】WinRing0 RC2 の IsCpuid()
←back ↑menu ↑top forward→
 DULL WEB  - 07/9/13(木) 23:56 -

引用なし
パスワード
   こんばんは。

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でしか意味を持ちませんが…(^_^;
ではでは。
458 hits

【2201】WinRing0 RC2 の IsCpuid() DULL 07/9/13(木) 23:56
【2202】Re:WinRing0 RC2 の IsCpuid() ひよひよ 07/9/14(金) 8:53

177 / 2351 ←次へ | 前へ→
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃ホーム  
ページ:  ┃  記事番号:   
51982
(SS)C-BOARD v3.8(とほほ改ver2.1) is Free