邪恶八进制信息安全团队技术讨论组's Archiver

金州 2005-12-16 00:25

[转载]检测CPU的主频示范程序

文章作者:罗云彬<BR><BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  Programmed by 罗云彬, [email]bigluo@telekbird.com.cn[/email]<BR>;  Website: [url]http://asm.yeah.net[/url]<BR>;  LuoYunBin's Win32 ASM page (罗云彬的编程乐园)<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  版本信息<BR>;  CPU 频率 - 利用586指令 rdtsc 计算CPU的频率<BR>;    V1.0 ------  2000年6月21日<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR><BR>   .586<BR>   .model flat, stdcall<BR>   option casemap :none  ; case sensitive<BR><BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  Include 数据<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR><BR>include    windows.inc<BR>include    user32.inc<BR>include    kernel32.inc<BR>include    comctl32.inc<BR>include    comdlg32.inc<BR><BR>includelib  user32.lib<BR>includelib  kernel32.lib<BR>includelib  comctl32.lib<BR>includelib  comdlg32.lib<BR><BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  Equ 数据<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR><BR>DLG_MAIN  equ    1000<BR>ID_SPEED  equ    1001<BR><BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  数据段<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR><BR>   .data?<BR><BR>dwTickCount  dd  ?<BR>dwTSC    dd  ?,?<BR>hInstance  dd  ?<BR>szBuffer  db  256 dup  (?)<BR><BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  子程序声明<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>_ProcDlgMain  PROTO  :DWORD,:DWORD,:DWORD,:DWORD<BR><BR>   .data<BR><BR>szSpeed    db  "你的CPU主频为 %d MHz",0<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR>;  代码段<BR>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><BR><BR>   .code<BR><BR>include    Win.asm<BR><BR>;********************************************************************<BR>_ProcDlgMain  proc  uses ebx edi esi, \<BR>   hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD<BR>   local  @stPoint:POINT<BR>   local  @hWindow<BR><BR>   mov  eax,wMsg<BR>   .if  eax == WM_CLOSE<BR>     invoke  EndDialog,hWnd,NULL<BR>     invoke  KillTimer,hWnd,1<BR>   .elseif  eax == WM_INITDIALOG<BR>     invoke  _CenterWindow,hWnd<BR>     invoke  GetTickCount    ;TSC 初始值<BR>     mov  dwTickCount,eax<BR><BR>     rdtsc<BR>     mov  dwTSC,eax<BR>     mov  dwTSC+4,edx<BR>     invoke  SetTimer,hWnd,1,1000,NULL<BR>   .elseif  eax == WM_TIMER<BR>     invoke  GetTickCount<BR>     push  eax<BR>     sub  eax,dwTickCount<BR>     pop  dwTickCount<BR>     push  eax<BR><BR>     rdtsc<BR>     push  edx<BR>     push  eax<BR>     sub  eax,dwTSC<BR>     sbb  edx,dwTSC+4<BR>     pop  dwTSC<BR>     pop  dwTSC+4<BR><BR>     mov  ecx,1000000<BR>     div  ecx      ;除以1Mhz=1000000hz<BR>     .if  edx >= 500000h    ;四舍五入<BR>       inc  eax<BR>     .endif<BR>     mov  ecx,1000<BR>     mul  ecx      ;1秒=1000毫秒<BR>     pop  ecx      ;pop出经过的毫秒数<BR>     div  ecx<BR><BR>     invoke  wsprintf,offset szBuffer,offset szSpeed,eax<BR>     invoke  SendDlgItemMessage,hWnd,ID_SPEED,\<BR>       WM_SETTEXT,0,offset szBuffer<BR>   .else<BR>;********************************************************************<BR>;  注意:对话框的消息处理后,要返回 TRUE,对没有处理的消息<BR>;  要返回 FALSE<BR>;********************************************************************<BR>     mov  eax,FALSE<BR>     ret<BR>   .endif      <BR>   mov  eax,TRUE<BR>   ret<BR>   <BR>_ProcDlgMain  endp<BR>;********************************************************************<BR>start:<BR>   invoke  GetModuleHandle,NULL<BR>   mov  hInstance,eax<BR>   invoke  DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0<BR>   invoke  ExitProcess,NULL<BR><BR>   end  start

页: [1]
© 1999-2008 EvilOctal Security Team