Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
3-82084
igor_b
2003-09-05 14:03
2003.09.25
MSSQL StoredProc


3-82089
RDA
2003-09-05 11:54
2003.09.25
Выбор полей по условию


14-82478
Knight
2003-09-04 22:34
2003.09.25
Linux


1-82235
LeNa19
2003-09-10 23:25
2003.09.25
создание обработчиков событий в runtime


3-82030
grusty
2003-09-05 12:41
2003.09.25
Как определить - существует ли поле в таблице?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский