popf { Вiдновити AC бiт в EFLAGS }
@80486: { Перевipка МП i486 i наступних моделей: }
{ установка/скидання ID прапору (бiт 21) в EFLAGS }
{ вказує на виконуємість команди CPUID на даному МП }
mov cpu_type,4 { Мiкропроцесор: i486 }
db 66h
mov ax,cx { Одержати початковий EFLAGS }
db 66h,35h { Змiнити командою XOR бiт ID в EFLAGS }
dd 200000h
db 66h
push ax { Збеpегти нове значення в стеку }
db 66h
popf { Занести нове значення в EFLAGS }
db 66h
pushf { Записати його в стек }
db 66h
pop ax { Переписати в EAX }
popf { Вiдновити FLAGS/EFLAGS }
db 66h
xor ax,cx { Якщо бiт ID не мiнявся: }
je @end_cpuid { МП не пiдтpимує команду CPUID }
{---Виконанння команди CPUID для визначення фирми, сiмейства, моделi МП---}
mov id_flag,1 { Установка прапору виконання МП команди CPUID }
db 66h
xor ax,ax { Параметр для CPUID: EAX=0 }
db 0fh,0a2h { Команда CPUID }
db 66h
mov ss:[bp+offset vend],bx { Iз pегiстpiв EBX, }
db 66h { EDX }
mov ss:[bp+offset vend+4],dx { i ECX }
db 66h { в змiнну vend заноситься }
mov ss:[bp+offset vend+8],cx { назва фирми }
cmp al,1 { В AL - найбiльше значення параметра CPUID }
jl @end_cpuid
mov par,al
db 66h
xor ax,ax
db 66h
inc ax { Установка параметра CPUID = 1 }
db 0fh,0a2h { Команда CPUID: в AL - сигнатура МП }
db 66h { В sn_3 - старшi 32 розряди }
mov word ptr sn_3,ax { серiйного номера МП }
db 66h
mov word ptr EBX_,bx{ В EBX_- Brand ID та ін.}
db 66h
mov word ptr ECX_,cx { В EСX_- особливостi МП (EСX) }
db 66h
mov word ptr feature,dx { В feature- особливостi МП (EDX) }
mov cx,ax
and ax,0f0h
db 0c1h,0e8h,4 { Зсув в AX на 4 розряди праворуч }
mov model, al { В AL - модель МП }
mov ax,cx
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.