zhangchunxia
驱动牛犊
驱动牛犊
  • 注册日期2002-03-27
  • 最后登录2004-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1512回复:10

怎样精确得到cpu的主频???

楼主#
更多 发布于:2002-07-05 10:23
我想在内核得到cpu的主频!那位高手可以帮帮忙???谢谢!!
nice
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-05 10:53
我想在内核得到cpu的主频!那位高手可以帮帮忙???谢谢!!
 


一般的主频(无超频)? 好象有专门的ASM 指令!

超频后?  这大概要自己计算喽???

 :)

[编辑 -  7/5/02 by  magicx]
[color=red]大头鬼! :P[/color]
eqinzm
驱动牛犊
驱动牛犊
  • 注册日期2001-10-18
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-05 12:06
// This code is taken directly from SoftIce.
ULONG __declspec(naked) CalibrateByTimer()
{
    __asm
{
      pushf
      push esi
      push edi
      push ebx
      push ecx
      push edx
      xor esi, esi
      cli
      mov ecx, 4

loc_4456F:
      push ecx
      mov al, 0D2h
      out 43h, al
      jmp short $+2
      in al, 40h
      mov cl, al
      in al, 40h
      mov ch, al
      rdtsc
      mov edi, eax
      xor ah, ah

loc_44584:

      mov al, 0D2h
      out 43h, al
      in al, 40h
      mov bl, al
      in al, 40h
      mov bh, al
      or ah, ah
      jnz short loc_4459D
      cmp bx, cx
      jbe short loc_44584
      inc ah
      jmp short loc_44584
; ĄĄĄĄĄĄĄĄĄĄĄĄč

loc_4459D:
      cmp bx, cx
      ja short loc_44584
      rdtsc
      sub eax, edi
      add esi, eax
      pop ecx
      loop loc_4456F

      shr esi,2

      mov eax,esi
      pop edx
      pop ecx
      pop ebx
      pop edi
      pop esi
      popf
      retn
    }
}
Hi
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-05 12:24
可以用cpuid得到cpu信息,然后再找出主频吧
上面那位大兄弟,你是自己用时间来算主频吗?我只是略微瞟了一眼你的程序
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-05 12:35
可以用cpuid得到cpu信息,然后再找出主频吧
上面那位大兄弟,你是自己用时间来算主频吗?我只是略微瞟了一眼你的程序


yeah,RDTSC instruction is enabled in windows2000
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-05 14:13
可以用cpuid得到cpu信息,然后再找出主频吧
上面那位大兄弟,你是自己用时间来算主频吗?我只是略微瞟了一眼你的程序


签名换了?“改斜归正”? :P

注意不要来这个表情: :mad:
[color=red]大头鬼! :P[/color]
zhangchunxia
驱动牛犊
驱动牛犊
  • 注册日期2002-03-27
  • 最后登录2004-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-05 17:31
///////////////////////////////////////////////
eqinzm:
    你好!!我试用了你的程序,可是他得到的频率在变化!大小好像跟cpu主频没关系,而是跟计算机的忙或不忙有关系!!而且关系很大,相差10倍.
能否解释一下程序!!谢谢!!

Koms Bomb:
    你好!用cpuid怎么得到cpu主频,好像没有什么办法!可以算出来?? 有人说用RDMSR,可是我都不知道怎么用?它返回的是什么?而且,它必须在ring0使用,可是,怎么从才能保证程序运行在ring0.非常感谢你的回答

  另外,还有什么好的方法!望不吝赐教!!!谢谢!!
nice
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-05 17:35
其实我对cpuid指令也不是很熟悉,它好像可以得到是什么cpu,比如PII之类的,我估计就可以知道主频了吧。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-05 18:30
其实我对cpuid指令也不是很熟悉,它好像可以得到是什么cpu,比如PII之类的,我估计就可以知道主频了吧。


知道简单型号也难以知道主频,一般常见的办法就是用RDTSC指令。
P6家族x86CPU每一时钟滴嗒将Time-stamp counter这个MSR增一,你用定时器在一段时间内取出差值(上面的例子用8253/8254,可就用系统提供定时手段,时间长些额外操作所占比例小些,自然精确些),除以时间就是主频。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-05 18:46
[quote]其实我对cpuid指令也不是很熟悉,它好像可以得到是什么cpu,比如PII之类的,我估计就可以知道主频了吧。


知道简单型号也难以知道主频,一般常见的办法就是用RDTSC指令。
P6家族x86CPU每一时钟滴嗒将Time-stamp counter这个MSR增一,你用定时器在一段时间内取出差值(上面的例子用8253/8254,可就用系统提供定时手段,时间长些额外操作所占比例小些,自然精确些),除以时间就是主频。 [/quote]
不准的,施主
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-05 19:10
不准的,施主


非常之准,不用怀疑。
有些人不准的唯一原因是定时的问题(定时弄得极不准)
游客

返回顶部