MainPage 〜きまぐれ ぷろぐらま語録〜
 

2024年4月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22
23
24 25 26 27
28 29 30        

最近の記事
Blog移転

エアポート2010を見た

花椒油

Steve Jobs,1955-2011

鉄球に無数のとげが付いた武器

M55→M42(T)が欲しい

健康診断done

回転寿司のルール

相模湖リゾート・プレジャー・フ ..

過去ログ 【表示/最小化】
2011年10月
2011年 9月
2011年 8月
2011年 7月
2011年 6月
2011年 5月
2011年 4月
2011年 3月
2011年 2月
2011年 1月
2010年12月
2010年11月
2010年10月
2010年 9月
2010年 8月
2010年 7月
2010年 6月
2010年 5月
2010年 4月
2010年 3月
2010年 2月
2010年 1月
2009年12月
2009年11月
2009年10月
2009年 9月
2009年 8月
2009年 7月
2009年 6月
2009年 5月
2009年 4月
2009年 3月
2009年 2月
2009年 1月
2008年12月
2008年11月
2008年10月
2008年 9月
2008年 6月
2008年 5月
2008年 4月
2008年 3月
2008年 2月
2008年 1月
2007年12月
2007年11月
2007年10月
2007年 9月
2007年 8月
2007年 7月
2007年 6月
2007年 5月
2007年 4月
2007年 3月
2007年 2月
2007年 1月
2006年12月
2006年11月
2006年10月
2006年 9月
2006年 8月
2006年 7月
2006年 6月
2006年 5月

広告欄

 

Blogを移転させました。
新Blogは次のURLです。
https://kerokero.org/wp/




CPUIDでCPU名の取得方法
インテルアーキテクチャのCPUには、
「そのCPUがどのような機能を持っているか?」
を調べるための命令がPentium時代(i486から?)から搭載されている。

これを使えば、
たとえば、MMXを搭載しているか?とか、SSEが搭載されているか?等の判別が可能だ。

で、ここでは、簡単にCPUID命令でCPUの名前を取得する方法を見てみよう。
なお、C言語(VS2008)のインラインアセンブラでのコードね。
※VS2008のウィザードでコンソールアプリとして開発。include等は省略してありいます。

int _tmain(int argc, _TCHAR* argv[]) {
  char pRet[4 * 12] ={0};
  pRet[4 * 12 - 1] = -1; //成功すればこの領域が\0になるので、判断用に-1を入れておく。
  __asm {
    //レジスタ退避
    pusha
    //CPUID命令が機能番号80000004番使えるかの確認
    mov eax, 80000000h
    cpuid
    cmp eax, 80000004h
    jl fin //使えない
    //では使おう。ホントはループした方が良いかと。
    mov eax, 80000002h
    cpuid
    //結果がeax〜edxレジスタに戻る。以下同じ。
    mov dword ptr[pRet + 4 * 0], eax
    mov dword ptr[pRet + 4 * 1], ebx
    mov dword ptr[pRet + 4 * 2], ecx
    mov dword ptr[pRet + 4 * 3], edx
    mov eax, 80000003h
    cpuid
    mov dword ptr[pRet + 4 * 4], eax
    mov dword ptr[pRet + 4 * 5], ebx
    mov dword ptr[pRet + 4 * 6], ecx
    mov dword ptr[pRet + 4 * 7], edx
    mov eax, 80000004h
    cpuid
    mov dword ptr[pRet + 4 * 8], eax
    mov dword ptr[pRet + 4 * 9], ebx
    mov dword ptr[pRet + 4 * 10], ecx
    mov dword ptr[pRet + 4 * 11], edx
  fin:
    // 退避したレジスタを戻す
    popa
  }
  if (pRet[4 * 12 - 1] == '\0') {
    //成功していれば、最後に'\0'が入っているので結果を表示
    printf("|%s|\n", pRet);
  } else {
    //失敗した
    printf("The cpuid command is not exists.\n");
  }
  return 0;
}


実行するとこうなります:
CPUID実行結果

まぁ、あまり使う機会はないけど、
CPUIDを使えば、CPUのいろんな情報を引き出せるので、
知ってて損はないかも知れない。

なんで、いきなりこんな事を書いたかというと、
部屋掃除をしていたら、昔、アセンブラでプログラムを書いていたときに読んだ、
インテル公式のCPUの解説書が出てきたので、なんとなく。
※PDF提供されていたのを、プリンタ出力して製本して使ってた。


00:00, Monday, May 23, 2011 ¦ 固定リンク ¦ 携帯


■コメント

■コメントを書く

※コメントの受け付けは終了しました

△ページのトップへ
 

最新のつぶやき

サイト内検索
カスタム検索

旅行関係の記事等
九州・広島旅行記 2009(かみちゅ!)
大阪出張(KANON)
大阪出張(ハルヒ)
三宅島旅行記'05
三宅島旅行記'08
三宅島旅行記'10
伊豆半島小旅行

最近のコメント

最近のトラックバック

IPv4枯渇時計

携帯で読む
   URLを携帯に送る





[Valid RSS]

Powered by CGI RESCUE