📄 cpuid.asm
字号:
;
; GRDB
;
; Copyright(c) LADsoft
;
; David Lindauer, camille@bluegrass.net
;
;
; cpuid.asm
;
; Function: Generic CPU identification
;
.model small
.586
;cpuid macro
; db 0fh,0a2h
;endm
public checkcpu, cpumodel, cpufeatures
.data
cpufeatures dd 0 ;holds features available
cpumodel db 0 ;model (3,4,5,6 etc.)
.code
checkcpu PROC
;
; 8086 has bits 12-15 of flags stuck on
;
pushf
pop bx
mov ax,0fffh
and ax,bx
push ax
popf
pushf
pop ax
and ax,0f000h
cmp ax,0f000h
jz failed
;
; 80286 has bits 12-15 of flags stuck off
;
mov [cpumodel],2
mov ax,0f000h
or ax,bx
push ax
popf
pushf
pop ax
and ax,0f000h
jz failed
;
; Now we have a 386 or better. On a 386 the AC bit (bit 18)
; may not be toggled
;
mov [cpumodel],3
pushfd
pop eax
cli
mov dx,sp
and sp,NOT 3
mov ebx,eax
btc eax,18
push eax
popfd
pushfd
pop eax
push ebx
popfd
mov sp,dx
xor eax,ebx
bt eax,18
jnc gotid
;
; Now see if a is a pentium or better. CPUID flag (bit 21) may not
; be toggled on a 486
mov [cpumodel],4
mov eax,ebx
btc eax,21
push eax
popfd
pushfd
pop eax
xor eax,ebx
bt eax,21
jnc gotid
;
; It is a pentium or better
;
; so issue a CPUID instruction (level 1) to get the model # and features dword
;
push ebx
mov eax,1
cpuid
mov [cpufeatures],edx
and ah,15
mov [cpumodel],ah
pop ebx
gotid:
push ebx
popfd
clc
ret
failed:
push bx
popf
stc
ret
checkcpu ENDP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -