?? 時鐘頻率.txt
字號:
利用Rdtsc指令計算CPU的時鐘頻率 By 憐香(于2003-11-15發表)
--------------------------------------------------------------------------------
; 參 精華帖“使用CPU時間戳進行高精度計時(轉載) By IPOz(于2002-11-18發表)”
; 利用Rdtsc指令計算CPU的時鐘頻率
; 文件名:Cpu.Asm
; Dos下 .Com 格式文件
.model tiny
.586
.code
org 100h
start:
lea dx,Message ;顯示信息
mov ah,9
int 21h
xor ax,ax
mov ds,ax
mov ebx,ds:[46ch] ;取時間,每55ms該值自動增1
rdtsc
mov esi,eax
mov edi,edx
mov ecx,ebx
bb:
cmp ecx,ds:[46ch]
jz bb
mov ecx,ds:[46ch]
rdtsc
push ecx
sub ecx,ebx
sub eax,esi
sbb edx,edi
push eax
push edx
mov eax,55000
mul ecx
mov ecx,eax
pop edx
pop eax
div ecx
call dispax
pop ecx
mov eax,ecx
sub eax,ebx
cmp ax,500 ;約30秒后自動退出
ja Over
mov ah,1 ;檢測是否有按鍵
int 16h
jz bb
mov ah,0 ;有,則讀按鍵
int 16h
Over:
mov ah,4ch ;程序結束
int 21h
; 顯示AL代表的ASCII碼字符
dispc proc NEAR
PUSH AX
PUSH DX
MOV AH,2
MOV DL,AL
INT 21H
POP DX
POP AX
RET
dispc endp
;以十進制的形式顯示AX的值,顯示所占的位數為CX
;若CX的值小于數據的實際寬度則按實際寬度輸出
dispax proc near
push ax
push bx
push cx
push dx
push bp
mov cx,5 ;輸出數據寬度5位
mov bx,0 ;記錄數據實際寬度
mov bp,10 ;十進制
disp1:
xor dx,dx
div bp
inc bx ;顯示數據的位數增1
push dx ;保存余數
cmp ax,0 ;商為0 ?
jnz disp1 ;沒,繼續!
sub cx,bx ;要求寬度和實際寬度比較
jle disp3
mov al,' ' ;寬度不夠,前面補空格
disp2:
call dispc
loop disp2
disp3:
mov cx,bx ;數據的實際位數送CX
disp4:
pop ax ;依次從堆棧中取數并顯示
and al,0fh
add al,'0'
call dispc
loop disp4
call SetPos
pop bp ;恢復寄存器的原值
pop dx
pop cx
pop bx
pop ax
ret
dispax endp
SetPos proc near ;調整光標位置
push ax
push dx
push ds
push cs
pop ds
lea dx,Back
mov ah,9
int 21h
pop ds
pop dx
pop ax
ret
SetPos endp
Even
Message db 13,10,'Press any key to STOP !',13,10,13,10
db 'Cpu Speed: MHz',8,8,8,8
Back db 8,8,8,8,8,'$'
end start
;--------------------------------------------------------------
編譯鏈接
D:\Masm615>ml Cpu.asm
Microsoft (R) Macro Assembler Version 6.15.8803
Patched for you by promethee [ECL] in the year 2001 - enjoy
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Assembling: Cpu.asm
Microsoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994
Copyright (C) Microsoft Corp 1984-1993. All rights reserved.
Object Modules [.obj]: Cpu.obj /t
Run File [Cpu.com]: "Cpu.com"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
D:\Masm615>Cpu
Press any key to STOP !
Cpu Speed: 1000 MHz
D:\Masm615>_
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -