Форум: "Система";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизКак узнать серийный номер процессора? Найти похожие ветки
← →
Snake7 (2003-07-14 18:35) [0]Люди подскажите как узнать серийны номер ЦП из под Делфи!
← →
VMcL (2003-07-14 18:59) [1]CPUID (см. док-цию Intel на их сайте)
← →
NightAngel (2003-07-15 06:21) [2]> Snake7 (14.07.03 18:35)
> как узнать серийны номер ЦП из под Делфи!
Спросить у самого процессора: В asm вставке выполните инструкцию CPUID (опкод 0Fh 0Ah). Не забудьте проверить поддерживает ли процессор эту команду, попробуйте установить флаг ID в 1 (бит 21 в регистре EFLAGS) — если это получается, значит, команда CPUID поддерживается. В EAX до вызова CPUID должно быть 03h, в регистрах ECX, EDX после выполнения инструкции будет серийный номер процессора, но насколько я знаю (точно не уверен), серийный номер есть только на процессорах PENTIUM III. Исходника у меня естественно нет, писАть - желания тоже.
Успехов!
← →
Anatoly Podgoretsky (2003-07-15 07:48) [3]CPUID это не серийный номер процессора, а идентификационный номер модели.
← →
Digitman (2003-07-15 08:56) [4]
> NightAngel
что-то я не вижу в мануале у Интела микрологики для initial EAX = 3
может, мануал отражает только совместимый микрокод всего семейства Пней ?
Operation
CASE (EAX) OF
EAX = 0:
EAX ¬ highest input value understood by CPUID; (* 2 for Pentium ® Pro processor *)
EBX ¬ Vendor identification string;
EDX ¬ Vendor identification string;
ECX ¬ Vendor identification string;
BREAK;
EAX = 1:
EAX[3:0] ¬ Stepping ID;
EAX[7:4] ¬ Model;
EAX[11:8] ¬ Family;
EAX[13:12] ¬ Processor type;
EAX[31:12] ¬ Reserved;
EBX ¬ Reserved;ECX ¬ Reserved;
EDX ¬ Feature flags; (* Refer to Figure 3-27 *)
BREAK;
EAX = 2:
EAX ¬ Cache and TLB information;
EBX ¬ Cache and TLB information;
ECX ¬ Cache and TLB information;
EDX ¬ Cache and TLB information;
BREAK;
DEFAULT: (* EAX > highest value recognized by CPUID *)
EAX ¬ reserved, undefined;
EBX ¬ reserved, undefined;
ECX ¬ reserved, undefined;
EDX ¬ reserved, undefined;
BREAK;
ESAC;
← →
NightAngel (2003-07-15 13:02) [5]> Anatoly Podgoretsky © (15.07.03 07:48)
Что есть - идентификационный номер модели?
> Digitman © (15.07.03 08:56)
Вот специально посмотрел:
IA-32 Intel® Architecture
Software Developer’s
Manual
Volume 2:
Instruction Set Reference
Copyright © 1997 - 2003 Intel Corporation
Operation
CASE (EAX) OF
EAX = 0:
EAX
← →
Anatoly Podgoretsky (2003-07-15 14:08) [6]Это вот это
EAX[3:0]
← →
NightAngel (2003-07-15 19:09) [7]> Anatoly Podgoretsky © (15.07.03 14:08)
А причем здесь это? Какое это имеет отношение к серийному номеру процессора?
← →
Song (2003-07-15 21:49) [8]
{$G+}
{$DEFINE ManyHyphens}
{$S-}
Procedure StoreHexNum; assembler; { For call from GetCPUSerialNumber function only! }
{ EAX = Number }
Asm
push cx
db 66h; push dx { push edx }
db 66h; xchg dx,ax { xchg edx,eax }
mov cl,32-4
@NextDigit:
db 66h; mov ax,dx { mov eax,edx }
db 66h; shr ax,cl { shr eax,cl }
and al,0Fh
add al,"0"
cmp al,"9"
jbe @@09
add al,("A"-("9"+1))
@@09: stosb
sub cl,4
jnc @NextDigit
db 66h; pop dx { pop edx }
pop cx
End;
{$S+}
Function GetCPUSerialNumber: String; assembler;
Asm
cld
les di,@Result
{$IFDEF ManyHyphens}
mov al,12+8*3+3
{$ELSE}
mov al,12+8*3+1
{$ENDIF}
stosb
db 66h; xor ax,ax { xor eax,eax }
db 0Fh,0A2h { cpuid }
db 66h; xchg ax,bx { xchg eax,ebx }
db 66h; stosw { stosd }
db 66h; xchg ax,dx { xchg eax,edx }
db 66h; stosw { stosd }
db 66h; xchg ax,cx { xchg eax,ecx }
db 66h; stosw { stosd }
{$IFDEF ManyHyphens}
mov al," "
stosb
{$ENDIF}
db 66h; xor ax,ax { xor eax,eax }
inc ax
db 0Fh,0A2h { cpuid }
call StoreHexNum
mov al,"-"
stosb
db 66h; xchg ax,dx { xchg eax,edx }
db 66h; xor dx,dx { xor edx,edx }
db 66h; xor cx,cx { xor ecx,ecx }
db 66h; shr ax,18+1 { shr eax,18+1 }
jnc @NoSerialNumber
mov ax,3
db 0Fh,0A2h { cpuid }
@NoSerialNumber:
db 66h; xchg ax,dx { xchg eax,edx }
call StoreHexNum
{$IFDEF ManyHyphens}
mov al,"-"
stosb
{$ENDIF}
db 66h; xchg ax,cx { xchg eax,ecx }
call StoreHexNum
End;
Var Pentium: Boolean;
Begin
Asm
mov al,1
mov byte ptr @,90h
@:dec ax
( "You need at least iPentium processor!"#7)
{$G+}
{$DEFINE ManyHyphens}
{$S-}
Procedure StoreHexNum; assembler; { For call from GetCPUSerialNumber function only! }
{ EAX = Number }
Asm
push cx
db 66h; push dx { push edx }
db 66h; xchg dx,ax { xchg edx,eax }
mov cl,32-4
@NextDigit:
db 66h; mov ax,dx { mov eax,edx }
db 66h; shr ax,cl { shr eax,cl }
and al,0Fh
add al,"0"
cmp al,"9"
jbe @@09
add al,("A"-("9"+1))
@@09: stosb
sub cl,4
jnc @NextDigit
db 66h; pop dx { pop edx }
pop cx
End;
{$S+}
Function GetCPUSerialNumber: String; assembler;
Asm
cld
les di,@Result
{$IFDEF ManyHyphens}
mov al,12+8*3+3
{$ELSE}
mov al,12+8*3+1
{$ENDIF}
stosb
db 66h; xor ax,ax { xor eax,eax }
db 0Fh,0A2h { cpuid }
db 66h; xchg ax,bx { xchg eax,ebx }
db 66h; stosw { stosd }
db 66h; xchg ax,dx { xchg eax,edx }
db 66h; stosw { stosd }
db 66h; xchg ax,cx { xchg eax,ecx }
db 66h; stosw { stosd }
{$IFDEF ManyHyphens}
mov al," "
stosb
{$ENDIF}
db 66h; xor ax,ax { xor eax,eax }
inc ax
db 0Fh,0A2h { cpuid }
call StoreHexNum
mov al,"-"
stosb
db 66h; xchg ax,dx { xchg eax,edx }
db 66h; xor dx,dx { xor edx,edx }
db 66h; xor cx,cx { xor ecx,ecx }
db 66h; shr ax,18+1 { shr eax,18+1 }
jnc @NoSerialNumber
mov ax,3
db 0Fh,0A2h { cpuid }
@NoSerialNumber:
db 66h; xchg ax,dx { xchg eax,edx }
call StoreHexNum
{$IFDEF ManyHyphens}
mov al,"-"
stosb
{$ENDIF}
db 66h; xchg ax,cx { xchg eax,ecx }
call StoreHexNum
End;
Var Pentium: Boolean;
Begin
Asm
mov al,1
mov byte ptr @,90h
@:dec ax
mov Pentium,al
End;
If not Pentium then WriteLn("You need at least iPentium processor!"#7)
else WriteLn("Your processor serial number is "", GetCPUSerialNumber, """)
End.
← →
Anatoly Podgoretsky (2003-07-15 22:48) [9]NightAngel (15.07.03 19:09)
Я не обратил внимение на ECX/EDX. ранее CPUID не имел информации о серийном номере процессора.
← →
Digitman (2003-07-16 08:59) [10]
> NightAngel
странно)
значит , мануал у меня не самый свежий что ли ?
вот этот (вроде бы тот же самый, судя по названию и году):
Intel Architecture
Software Developer’s Manual
Volume 2:
1999г.
← →
Anatoly Podgoretsky (2003-07-16 09:11) [11]Digitman © (16.07.03 08:59)
Вот последнии, на моем сайте, они же у Интела:
Basic Architecture {3339 Kb} dl=95
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Hardware/Processors/Intel/24547011.pdf&file_id=P4-24547011
Instruction Set Reference {4368 Kb} dl=66
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Hardware/Processors/Intel/24547111.pdf&file_id=P4-24547111
System Programming Guide {5766 Kb} dl=0
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Hardware/Processors/Intel/24547211.pdf&file_id=P4-24547211
Optimization Reference Manual {2252 Kb} dl=59
http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Hardware/Processors/Intel/24896608.pdf&file_id=P4-24896608
← →
Digitman (2003-07-16 10:25) [12]
> Anatoly Podgoretsky
Спасибо !
Видать, прозевал я момент обновления)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c