desc_L2:word; { Дескриптор кеша L2 }
{ Серiйний номер мiкропроцесора: }
sn_1, { молодшi 32 розряди, }
sn_2, { середнi 32 розряди, }
sn_3:longint; { старшi 32 розряди }
vend:array[1..12] of char; { Назва фiрми-виготiвника }
brand_str:array[1..48] of char; { Бренд-строка фiрми-виготiвника }
typ, { Тип МП }
model, { Модель МП }
i,j,
id_flag, { Пpапоp виконання МП команди CPUID }
cpu_type, { Номер типу МП }
brand, { Брэнд ID }
CLFSH, { Довжина рядка кеша }
NMP, { Число логічних процесорів в кристалі }
par:byte; { Число параметрiв команди CPUID }
uknown:boolean; { Ознака невизначення типу МП }
s:string;
begin
id_flag:=0;
unknown:=false;
asm
pushf { Збеpегти FLAGS }
@8086: { Перевiрка МП i8086: }
{ бiти 12-15 pегiстpу FLAGS завжди встановленi }
pushf
pop ax
mov cx,ax
and ax,0fffh
push ax
popf
pushf
pop ax
and ax,0f000h
cmp ax,0f000h
mov cpu_type,0 { Мiкропроцесор: 8086 }
jne @80286
jmp @end_cpuid
@80286: { Перевiрка МП i80286: }
{ бiти 12-15 pегiстpу FLAGS в pеальному режимi завжди скинутi }
or cx,0f000h
push cx
popf
pushf
pop ax
and ax,0f000h
mov cpu_type,2 { Мiкропроцесор: 80286 }
jnz @80386
jmp @end_cpuid
@80386: { Перевiрка МП i80386: }
{ прапор AC (бiт 18) pегiстpа EFLAGS не може бути встановлений }
db 66h { Префiкс розрядностi: 32 розряди }
pushf { Запис в стек вихiдного EFLAGS }
db 66h
pop ax { Занести в EAX вихiдний EFLAGS }
db 66h
mov cx,ax { Збеpегти вихiдний EFLAGS в ECX }
db 66h,35h { Змiнити командою XOR бiт AC в EFLAGS }
dd 040000h
db 66h
push ax { Збеpегти нове значення EFLAGS в стеку }
db 66h
popf { Змiнити поточне значення EFLAGS }
db 66h
pushf
db 66h
pop ax { Запам'ятати нове значення EFLAGS в EAX }
db 66h
xor ax,cx
mov cpu_type,3
jz @end_cpuid { Якщо бiт AC не змiнюється: }
db 66h { мiкропроцесор: 80386 }
push cx
db 66h
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.