.586P rdtsc MACRO db 0fh,031h ENDM data segment use16 CPUSPEED db 4 dup (0)," MHz",'$' data ends stk segment stack use16 db 256 dup (?) stk ends code segment use16 assume cs:code,ss:stk,ds:data ByteToStr PROC xor ah,ah WordToStr: xor dx,dx DWordToStr: push si push di mov si,10 xor cx,cx Next_Digit: push ax mov ax,dx xor dx,dx div si mov bx,ax pop ax div si push dx mov dx,bx inc cx or bx,ax jnz Next_Digit cld Store_Digit_Loop: pop ax add al,'0' stosb loop Store_Digit_Loop pop di pop si ret ByteToStr ENDP start: mov ax,data mov ds,ax mov es,ax mov eax,cr4 and al,0FBh mov cr4,eax in al,70h or al,80h out 70h,al mov al,0feh out 21h,al hlt rdtsc mov esi,eax hlt rdtsc sub eax,esi mov ebx,1190000 mul ebx mov ebx,1000000 div ebx mov edx,0 mov ebx,65535 div ebx rol eax,16 mov dx,ax shr eax,16 lea di,CPUSPEED call dwordtostr mov al,0 out 21h,al in al,70h and al,7fh out 70h,al mov ah,9 mov dx,offset CPUSPEED int 21h exit: mov ax,4c00h int 21h code ends end start |