CPUID ¬O 80486 CPU ¥H«á¡A¦b x86 «ü¥O¶°©Ò·s¼Wªº¤@Ó«ü¥O¡A¥¦ªº¥Î³~¦b©óŲ§O CPU ºØÃþ©Î´£¨Ñ CPU ¯S©Ê¡C¦b 80386 ¥½´Á¡ACPU ¨â¤j»s³y¼t°Ó¡AINTEL »P AMD¡A±`±À¥X®É¯ß§ó°ª³t«×§ó§Öªº CPU ¬Û¤¬Ävª§¡A³o¥»¬O¥ó¦n¨Æ¡A¦ý¦³¤£¨v¼t°Ó§â¸û§C®É¯ßªº CPU ¤Wªº¼ÐÅÒ¿i±¼«á«·s¦L»s¸û°ª®É¯ßªº¦r¼Ë¡AÂǦ¹³½¥Ø²V¯]Àò¨ú¤£¸q¤§°]¡C
¤p¤ì°¸°O±o¨º®ÉÁÙ¦³³\¦h¤åÄm±´°Q¡A¬O§_¯à§Q¥Î CPU ªº¬Y¨Ç¯S©Ê¨Ó¤À¿ë CPU ¥H¤Î¬O§_¦³¤èªk¯à¿ëÃÑ CPU ®É¯ß¡A«eªÌ±`±`¥u¯à¤À¿ë 8088¡B80286¡B80386 µ¥³oºØ¤£¦P¥@¥Nªº CPU¡A¬Æ¦ÜµLªk°Ï¤À¤£¦P¼t°Ó©Ò»s§@ªº CPU¡C¦Ü©ó«áªÌ¨ì¥Ø«e¦ü¥G¬OµL¸Ñªº¡C«á¨Ó CPU ¡y«¬¸¹¡z¤é¯q½ÆÂø¡A¦pªG¥u¬O¾a CPU ¬Y¨Ç¯S©Ê¨Ó¿ëÃÑ¡A¹ê¦b¬O¤@¥ó¤£©ö¹F¦¨ªº¥Ø¼Ð¡C¦]¦¹¡AINTEL ¦b 80486 CPU «ü¥O¶°¤¤·s¼W¤@Ó«ü¥O¡ACPUID¡A¨Ó¿ëÃÑ CPU «¬¸¹¡A¤£¶È¶È¦p¦¹¡A¥¦ÁÙ¸Ô²Óªº¦C»s³y¼t°Ó¡B®É¯ß¡B§Ö¨úµ¥µ¥¸ê®Æ¡A©Ò¥H CPUID ¥i»¡¬O CPU ªº¨¤ÀÃÒ¡C
¨Ã¤£¬O©Ò¦³ªº CPU ³£¯à°õ¦æ CPUID «ü¥O¡A¨Ò¦p 8086/88¡B80286¡B80386¡A·íµM°Õ¡A²{¦b¤j·§¤]§ä¤£¨ì³o¨Ç CPU ¤F¡A¤£¹LÁÙ¬O§âÀˬdªº¤èªk»¡¤@»¡¡C®Ú¾Ú^¯Sº¸¤åÄm¡AIntel® Processor Identification and the CPUID Instruction¡Aªº°O¸ü¡A¦pªG CPU ©µ¦ùºX¼Ð ( EFLAG ) ªº²Ä 21 ¦ì¤¸ ( ºÙ¬° ID ) ¥i¥H¥Ñ³nÅé¼g¤Jªº¸Ü¡A¨º»ò§Aªº CPU ¥i¥H°õ¦æ CPUID¡C©³¤U¬O¤@¬qÀˬdªºµ{¦¡½X¡G
;¦pªGµ{¦¡¥i¥H§ïÅÜ EFLAGE ªº²Ä 21 ¦ì¤¸¡A¨º»ò CPUID ¦³®Ä¡A§_«hµL®Ä pushfd ;¨Ï©µ¦ùºX¼Ð±À¤J°ïÅ| pop eax ;§â°ïÅ|¤¤ªº©µ¦ùºX¼Ð¼u¥X¦Ü EAX mov ecx,eax ;«O¦sªº©µ¦ùºX¼Ð xor eax,200000h ;§ïÅܱj¨î©µ¦ùºX¼Ð²Ä 21 ¦ì¤¸ push eax ;§â§ïÅÜ«á·sªº©µ¦ùºX¼Ð±À¤J°ïÅ| popfd ;¦s¤J©µ¦ùºX¼Ð pushfd ;¦A¨ú¥X©µ¦ùºX¼Ð pop eax xor eax,ecx ;¦pªG©µ¦ùºX¼Ðªº²Ä21¦ì¤¸¬°1¡A¨º»ò jz no_cpuid ;CPUID¦s¦b¡A§_«h¤£¦s¦b ¡K¡K¥i¥H°õ¦æ CPUID «ü¥O¡K¡K no_cpuid: ¡K¡K¤£¯à°õ¦æ CPUID «ü¥O¡K¡K
¦b 80x86 «ü¥O¶°¤¤¦³¤@Ó«ü¥O¥i¥Hª½±µ¨ú±oºX¼Ð¼È¦s¾¹¤§È¡A¥¦¬O LAHF¡ALAHF §â©µ¦ùºX¼Ð¼È¦s¾¹ªº³Ì§C¤K¦ì¤¸¦s¤J AH ¼È¦s¾¹ùØ¡CSAHF ¬O§â AH ¤§È¦s¤J©µ¦ù¼È¦s¾¹ªº³Ì§C¤KӦ줸¡A¡C¤U¹Ï¬O 8086/8088 ºX¼Ð¼È¦s¾¹¦U¦ì¤¸¤À¥¬¡G
¥Ñ¹Ï¤W¥iª¾¡ASAHF ·|¼vÅT CF¡BPF¡BAF¡BZF¡BSF ¤ÓºX¼Ð¡ALAHF ¬O§âºX¼Ð¼È¦s¾¹¤§È¦s¤J AH ¤¤¡A¦]¦¹¤£¼vÅTì¨ÓªººX¼Ð¡CSAHF¡BLAHF ¤£»Ýn¹Bºâ¤¸¡A¨ä»yªk¬O¡G
SAHF LAHF
ÁöµM LAHF ¯àª½±µ¨ú±oºX¼Ð¼È¦s¾¹¡A¦ý¬O¹ï©ón¦s¨ú©µ¦ùºX¼Ðªº ID ¦ì¤¸«o²@µLÀ°§U¡A¥u¦nÂǧU°ïÅ|¡C
PUSHF ¬O§â 16 ¦ì¤¸ªº 8086/8088 ºX¼Ð¼È¦s¾¹±À¤J°ïÅ|¡A¦Ó POPF «h¬O§â°ïÅ|³»ªº 16 ¦ì¤¸¸ê®Æ¼u¥X¨ì 16 ¦ì¤¸ªººX¼Ð¼È¦s¾¹¡CPUSHFD «h¬O§â 32 ¦ì¤¸ªº EFLAG ±À¤J°ïÅ|¡A32 ¦ì¤¸ªºªø«×¬OÂù¦r²Õ¡APUSHFD ªº¡yD¡z¬O double word ¤§·N¡FPOPFD «h¬O§â°ïÅ|³»ªºÂù¦r²Õ¼u¥X¨ì EFLAG¡C³o¥|Ó«ü¥O¡A¤]³£¤£¶·¹Bºâ¤¸¡C
n§Q¥Î CPUID «ü¥OÀò±o CPU ¸ê®Æ¡A¤@¯ë¬O¥H EAX ·í°µ¯Á¤ÞÈ¡A©Òµ¹©wªº EAX ¯Á¤ÞȤ£¦P¡A´N¥i¥HÀò±o¤£¦Pªº CPU ¸ê®Æ¡C³o¨Ç¯Á¤ÞÈ¥i¤À¬°¨â¤jÃþ¡G°ò¥»¥\¯à ( standard function ) »P©µ¦ù¥\¯à ( extended function ) ¡A°ò¥»¥\¯àªº EAX ¯Á¤Þȳ̰ª¦ì¤¸¬°¹s¡A©µ¦ù¥\¯àªº³Ì°ª¦ì¤¸¬° 1¡A¤£ºÞ¬O¨º¤@®a¤½¥q©Ò¥Í²£ªº x86 ³B²z¾¹¡A°ò¥»¥\¯à©Î©µ¦ù¥\¯à³£¦³¦n´XÓ¡A©Ò¥H±o¥ý¨ú±o°ò¥»¥\¯à©Î©µ¦ù¥\¯àªº³Ì¤j¯Á¤ÞÈ¡C¤@¯ë¬O¥ý§â EAX ³]¬° 0¡AµM«á°õ¦æ CPUID¡A´N¥i¥H¦b EAX ¤¤±o¨ì°ò¥»¥\¯àªº³Ì¤j¯Á¤ÞÈ¡F¦ÓnÀò±o©µ¦ù¥\¯àªº³Ì¤j¯Á¤ÞÈ¡A¥ý¨Ï EAX ³]¬° 80000000H¡A¦A°õ¦æ CPUID¡A¦bªð¦^®É¡AEAX ´N¦s¦³³Ì¤j©µ¦ù¥\¯àªº¯Á¤ÞÈ¡C±o¨ì³Ì¤j¯Á¤ÞÈ«á¡AEAX ´NÀ³¸Ó¦b³oӳ̤jȤº¥h¡y©I¥s¡zCPUID¡A¦pªG§A¥Î¤ñ³Ì¤j¯Á¤ÞÈÁÙ¤jªº¼ÆȦs©ó EAX¡A¥h°õ¦æ CPUID¡Aµ²ªG©M¥H³Ì¤j¯Á¤ÞȤ@¼Ë¡C
·í EAX µ¥©ó 0 ¦A°õ¦æ CPUID «á¡ACPUID ·|¶Ç¦^¨âµ§¸ê®Æ¡A²Ä¤@µ§¸ê®Æ¬O¦s©ñ¦b EAX¡AEAX ·|¶Ç¦^°ò¥»¥\¯àªº³Ì¤j¯Á¤ÞÈ¡A²Ä¤Gµ§¸ê®Æ¦s©ñ¦b EBX¡BECX¡BEDX ¦@ 96 ¦ì¤¸¡A¥¦Ì¦@¦Pªí¥Ü»s³y¼t°Óªº¦WºÙ¦r¦ê¡A¦pªG¬O^¯Sº¸ªº CPU¡A¨ä¤À¥¬¦p¤U¹Ï¡G
EAX=0000 0001 ¸¹ªº°ò¥»¥\¯à¥i¥H¨ú±o CPU Äݩ󨺤@ºØµ¥¯Å¡B»sµ{¤Î¬Y¨Ç CPU ¯S©Ê¡C
EAX ªí¥Ü CPU ªºµ¥¯Å ( Family )¡B®Ö¤ß ( Model ) »P¤uÃÀ»s¦¨ ( Stepping )¡A¤U¹Ï¬° EAX ªºªð¦^È¡A¦U¦ì¤¸©Ò¥Nªíªº·N¸q¡G
Model ¥Î¨Ó°Ï§O¦P¤@¥N¦ý¤£¦P®Ö¤ßªº CPU¡A¨Ò¦p¡G
Stepping ªí¥Ü¦P¤@®Ö¤ß¤£¦P¤uÃÀªº²£«~¡A¨Ò¦p¡G
¤Uªí¬O^¯Sº¸ªº CPU ¥H EAX=1 ¬°°Ñ¼Æ¡AEBX ªºªð¦^È¡A¹ï AMD ªº CPU ¨Ó»¡¡A¤jP¬Û¦P¡A¥u¦³¦ì¤¸ 4¡ã12 ©M 14¡ã22 §¡«O¯d¤£¥Î¡C
¦ì¤¸ | ¦WºÙ | »¡¡@©ú ¦¹¦ì¤¸¬° 1 ®É |
0¡ã7 | Brand ID | ¦b Pentium !!! ªº®É¥NùØ¡A¶}©l¥Î Brand ID ¨Ó¸É¨¬ Family¡BModel¡BStepping ªº¤£¨¬¡A¦]¦¹¥Ø«e¬°¤î¡An¿ëÃÑ CPU¡y¨¤À¡z¡A¥²¶·¥Î³o¥|µ§¸ê®Æ¨Ó§PÂ_¡C |
8¡ã15 | Chunks | |
16¡ã23 | Count | |
24¡ã31 | APIC ID |
¤Uªí¬O^¯Sº¸ªº CPU ¥H EAX=1 ¬°°Ñ¼Æ¡AECX ªºªð¦^È¡A¹ï AMD ªº CPU ¨Ó»¡¡A¤jP¬Û¦P¡A¥u¦³¦ì¤¸ 4¡ã12 ©M 14¡ã22 §¡«O¯d¤£¥Î¡C
¦ì¤¸ | ÁY¼g | ¦WºÙ | »¡¡@©ú ¦¹¦ì¤¸¬° 1 ®É |
0 | SSE3 | Streaming SIMD Extensions 3 | ¤ä´© Streaming SIMD Extensions 3 «ü¥O¶° |
1¡ã2 | «O¯d | ||
3 | MONITOR | MONITOR/MWAIT | ¤ä´© MONITOR »P MWAIT «ü¥O |
4 | DS-CPL | CPL Qualified Debug Store | |
5 | VMX | Virtual Machine Extensions | ¤ä´© Virtualization §Þ³N |
6 | «O¯d | ||
7 | EST | Enhanced Intel SpeedStep® Technology | ´£¨Ñ²Ä¤G¥Nªº SpeedStep §Þ³N |
8 | TM2 | Thermal Monitor 2 | ´£¨Ñ Thermal Monitor 2 |
9 | SSSE3 | Supplemental Streaming SIMD Extension 3 | ¤ä´© SSSE3 «ü¥O¶° |
10 | CID | Context ID | ²Ä¤@¶¥§Ö¨ú¥i³Q BIOS ³]¬° adaptive ©Î shared ¼Ò¦¡ |
11¡ã12 | «O¯d | ||
13 | CX16 | CMPXCHG16B | ¤ä´© CMPXCHG16B «ü¥O |
14 | xTPR | Send Task Priority Message | |
15¡ã17 | «O¯d | ||
18 | DCA | Direct Cache Access | |
19¡ã31 | «O¯d |
¤Uªí¬O^¯Sº¸ªº CPU ¥H EAX=1 ¬°°Ñ¼Æ¡AEDX ªºªð¦^È¡A¹ï AMD ªº CPU ¨Ó»¡¡A¤jP¬Û¦P¡A¥u¦³¦ì¤¸ 18¡B20¡ã22¡B27¡B29¡ã31 §¡«O¯d¤£¥Î¡C
¦ì¤¸ | ÁY¼g | ¦WºÙ | »¡¡@©ú ¦¹¦ì¤¸¬° 1 ®É |
0 | FPU | Floating-point unit on-Chip | ³B²z¾¹¤º§t¤ä´© 80387 ¯BÂI«ü¥Oªº FPU |
1 | VME | Virtual Mode Extension | ¦¹³B²z¾¹¤ä´© V86 ªº©µ¦ù¼Ò¦¡ ( extended V86 mode ) |
2 | DE | Debugging Extension | |
3 | PSE | Page Size Extension | ³B²z¾¹¤ä´© 4MB ªº¤À¶ |
4 | TSC | Time-Stamp Counter | ¤ä´© RDTSC «ü¥O¡ARDTSC «ü¥O¥i¥Hpºâ¥X CPU ÀW²v |
5 | MSR | Model Specific Registers | ¤ä´© RDMSR¡BWRMSR «ü¥O |
6 | PAE | Physical Address Extension | ¤ä´©¯u¹ê¦ì§}¶W¹L 32 ¦ì¤¸ |
7 | MCE | Machine Check Extension | |
8 | CX8 | CMPXCHG8 Instruction Support | ¤ä´© CMPXCHG8 «ü¥O |
9 | APIC | On-chip APIC Hardware Supported | |
10 | «O¯d | ||
11 | SEP | Fast System Call | CPU ¤ä´© Fast System Call «ü¥O¡ASYSENTER »P SYSEXIT «ü¥O |
12 | MTRR | Memory Type Range Registers | CPU ¾Ö¦³ MTRR_CAP ¼È¦s¾¹ |
13 | PGE | Page Global Enable | ? |
14 | MCA | Machine Check Architecture | ? |
15 | CMOV | Conditional Move Instruction Supported | CPU ¤ä´© CMOVVcc |
16 | PAT | Page Attribute Table | ¤ä´© Page Attribute Table |
17 | PSE-36 | 36-bit Page Size Extension | ? |
18 | PSN | Processor Serial Number | ¤ä´© 96 ¦ì¤¸ªº CPU §Ç¸¹ |
19 | CLFSH | CLFLUSH Instruction Supported | ¤ä´© CLFLUSH «ü¥O |
20 | «O¯d | ||
21 | DS | Debug Store | ? |
22 | ACPI | Thermal Monitor and Software Controlled Clock Facilities Supported | |
23 | MMX | MMX Supported | ¤ä´© MMX «ü¥O¶° |
24 | FXSR | Fast Floating-point Save and Restore | ¤ä´©·sªº FPU «ü¥O¡AFXSAVE¡BFXRSTOR |
25 | SSE | Streaming SIMD Extensions Supported | ¤ä´© SSE «ü¥O¶° |
26 | SSE2 | Streaming SIMD Extensions 2 | ¤ä´© SSE2 «ü¥O¶° |
27 | SS | Self-Snoop | ? |
28 | HTT | Multi-Threading | CPU ¤ä´©¶W¹L¤@Ó¥H¤WªºÅÞ¿è³B²z¾¹ |
29 | TM | Thermal Monitor Supported | CPU ´£¨Ñ·Å±±¹q¸ô |
30 | IA64 | IA64 Capabilities | ¦¹ CPU ¬O Intel Itanium ®a±Úªº¤@û¡A¤ä´© IA64 ( IA64 »P AMD ©Ò´£¥X¨Óªº AMD64 ¤£¬Û®e ) |
31 | PBE | Pending Break Enable |
¹ï©ó^¯Sº¸ªº CPU ¦Ó¨¥¡AEAX=00000002H ¥\¯à¶Ç¦^ CPU ªº§Ö¨ú¤ÎÂà´««á³Æ½w½Ä¾¹©Ê½è¡F¦ý¬O¹ï AMD ªº CPU ¦Ó¨¥¡A00000002H¡ã00000004H ¥\¯à¬O«O¯dµL¥Îªº¡A¨ä§Ö¨ú»PÂà´««á³Æ½w½Ä¾¹©Ê½èªº©Ê½è¬O¦b©µ¦ù¥\¯à 80000005H¡B80000006H ¥\¯à¡C( ¦³ÃöÂà´««á³Æ½w½Ä¾¹¡A§Y TLB [ Translation Lookaside Buffer ]¡Aªº¤¶²Ð½Ð°Ñ¦Ò zues ºô¶¡A¡y¸ôº©º©¨ä×»·¤¼, §^±N¤W¤U¦Ó¨D¯Á¡I¡zªº TLB ²¤¶ )
·í§ÚÌ¥H EAX=00000002 ¬°°Ñ¼Æ°õ¦æ CPUID «á¡A·|¦b EAX¡BEBX¡BECX¡BEDX ¼È¦s¾¹·|¦s¤J§Ö¨ú¤ÎÂà´««á³Æ½w½Ä¾¹ªº¸ê®Æ¡A¦ý¬O¦³®É¸ê®Æ¶q¤Ó¤j¡A¥i¯à©ñ¤£¤U¡A¦]¦¹¦b AL ¤¤¦s¦³n°õ¦æ´X¦¸¥H EAX=00000002 ¬°°Ñ¼Æªº CPUID ¤~¯àÀò¨ú©Ò¦³ªº§Ö¨ú¤ÎÂà´««á³Æ½w½Ä¾¹¸ê®Æ¡C³o¨Ç¸ê®Æ¨C 8 Ӧ줸¤@²Õ¡A»Ý¹ï·Ó¤Uªí¡A¤~¯à±oª¾¨ä·N¸q¡G
¼ÆÈ | §Ö¨ú©Î TLB ©Ê½è | ¼ÆÈ | §Ö¨ú©Î TLB ©Ê½è | |
00H | µL·N¸q | 01H | «ü¥O TLB¡G4 KB Pages, 4-way set associative, 32 entries | |
02H | «ü¥O TLB¡G4 MB Pages, fully associative, 2 entries | 03H | ¸ê®Æ TLB¡G4 KB Pages, 4-way set associative, 64 entries | |
04H | ¸ê®Æ TLB¡G4 MB Pages, 4-way set associative, 8 entries | 05H | ¸ê®Æ TLB¡G4 MB Pages, 4-way set associative, 32 entries | |
06H | L1 «ü¥O§Ö¨ú¡G8KB, 4-way set associative, 32 entries | 08H | L1 «ü¥O§Ö¨ú¡G16 KB, 4-way set associative, 32-byte line size | |
0AH | L1 ¸ê®Æ§Ö¨ú¡G8 KB, 2-way set associative, 32-byte line size | 0CH | L1 ¸ê®Æ§Ö¨ú¡G16 KB, 4-way set associative, 32-byte line size | |
22H | L3 §Ö¨ú¡G512 KB, 4-way set associative, sectored cache, 64-byte line size | 23H | L3 §Ö¨ú¡G1 MB, 8-way set associative, sectored cache, 64-byte line size | |
25H | L3 §Ö¨ú¡G2 MB, 8-way set associative, sectored cache, 64-byte line size | 29H | L3 §Ö¨ú¡G4 MB, 8-way set associative, sectored cache, 64-byte line size | |
2CH | L1 ¸ê®Æ§Ö¨ú¡G32 KB, 8-way set associative, 64-byte line size | 30H | L1 «ü¥O§Ö¨ú¡G32 KB, 8-way set associative, 64-byte line size | |
39H | L2 §Ö¨ú¡G128 KB, 4-way set associative, sectored cache, 64-byte line size | 3AH | L2 §Ö¨ú¡G192 KB, 6-way set associative, sectored cache, 64-byte line size | |
3BH | L2 §Ö¨ú¡G128 KB, 2-way set associative, sectored cache, 64-byte line size | 3CH | L2 §Ö¨ú¡G256 KB, 4-way set associative, sectored cache, 64-byte line size | |
3DH | L2 §Ö¨ú¡G384 KB, 6-way set associative, sectored cache, 64-byte line size | 3EH | L2 §Ö¨ú¡G512 KB, 4-way set associative, sectored cache, 64-byte line size | |
40H | ¨S¦³ L2 §Ö¨ú©Î¬O¦³ L2 §Ö¨ú¦ýµL L3 §Ö¨ú | 41H | L2 §Ö¨ú¡G128 KB, 4-way set associative, 32-byte line size | |
42H | L2 §Ö¨ú¡G256 KB, 4-way set associative, 32-byte line size | 43H | L2 §Ö¨ú¡G512 KB, 4-way set associative, 32-byte line size | |
44H | L2 §Ö¨ú¡G1 MB, 4-way set associative, 32-byte line size | 45H | L2 §Ö¨ú¡G2 MB, 4-way set associative, 32-byte line size | |
46H | L3 §Ö¨ú¡G4 MB, 4-way set associative, 64-byte line size | 47H | L3 §Ö¨ú¡G8 MB, 8-way set associative, 64-byte line size | |
49H | L3 §Ö¨ú¡G4 MB, 16-way set associative, 64-byte line size (Intel Xeon processor MP,
Family F, Model 6) L2 §Ö¨ú¡G4 MB, 16-way set associative, 64-byte line size | 4AH | L3 §Ö¨ú¡G6 MB, 12-way set associative, 64-byte line size | |
4BH | L3 §Ö¨ú¡G8 MB, 16-way set associative, 64-byte line size | 4CH | L3 §Ö¨ú¡G12 MB, 12-way set associative, 64-byte line size | |
4DH | L3 §Ö¨ú¡G16 MB, 16-way set associative, 64-byte line size | 50H | «ü¥O TLB¡G4 KB, 2 MB or 4 MB pages, fully associative, 64 entries | |
51H | «ü¥O TLB¡G4 KB, 2 MB or 4 MB pages, fully associative, 128 entries | 52H | «ü¥O TLB¡G4 KB, 2 MB or 4 MB pages, fully associative, 256 entries | |
56H | ¸ê®Æ TLB¡G4 MB pages, 4-way set associative, 16 entries | 57H | ¸ê®Æ TLB¡G4 MB pages, 4-way set associative, 16 entries | |
5BH | ¸ê®Æ TLB¡G4 KB or 4 MB pages, fully associative, 64 entries | 5CH | ¸ê®Æ TLB¡G4 KB or 4 MB pages, fully associative, 128 entries | |
5DH | ¸ê®Æ TLB¡G4 KB or 4 MB pages, fully associative, 256 entries | 60H | L1 ¸ê®Æ§Ö¨ú¡G16 KB, 8-way set associative, sectored cache, 64-byte line size | |
66H | L1 ¸ê®Æ§Ö¨ú¡G8 KB, 4-way set associative, sectored cache, 64-byte line size | 67H | L1 ¸ê®Æ§Ö¨ú¡G16 KB, 4-way set associative, sectored cache, 64-byte line size | |
68H | L1 ¸ê®Æ§Ö¨ú¡G32 KB, 4 way set associative, sectored cache, 64-byte line size | 70H | Trace §Ö¨ú¡G12 K-uops, 8-way set associative | |
71H | Trace §Ö¨ú¡G16 K-uops, 8-way set associative | 72H | Trace §Ö¨ú¡G32 K-uops, 8-way set associative | |
73H | Trace §Ö¨ú¡G64 K-uops, 8-way set associative | 78H | L2 §Ö¨ú¡G1 MB, 4-way set associative, 64-byte line size | |
79H | L2 §Ö¨ú¡G128 KB, 8-way set associative, sectored cache, 64-byte line size | 7AH | L2 §Ö¨ú¡G256 KB, 8-way set associative, sectored cache, 64-byte line size | |
7BH | L2 §Ö¨ú¡G512 KB, 8-way set associative, sectored cache, 64-byte line size | 7CH | L2 §Ö¨ú¡G1 MB, 8-way set associative, sectored cache, 64-byte line size | |
7DH | L2 §Ö¨ú¡G2 MB, 8-way set associative, 64-byte line size | 7FH | L2 §Ö¨ú¡G512 KB, 2-way set associative, 64-byte line size | |
82H | L2 §Ö¨ú¡G256 KB, 8-way set associative, 32-byte line size | 83H | L2 §Ö¨ú¡G512 KB, 8-way set associative, 32-byte line size | |
84H | L2 §Ö¨ú¡G1 MB, 8-way set associative, 32-byte line size | 85H | L2 §Ö¨ú¡G2 MB, 8-way set associative, 32-byte line size | |
86H | L2 §Ö¨ú¡G512 KB, 4-way set associative, 64-byte line size | 87H | L2 §Ö¨ú¡G1 MB, 8-way set associative, 64-byte line size | |
B0H | «ü¥O TLB¡G4 KB Pages, 4-way set associative, 128 entries | B1H | «ü¥O TLB¡GMB Pages, 4-way set associative, 4 entries «ü¥O TLB¡G2 MB Pages, 4-way set associative, 8 entries | |
B3H | ¸ê®Æ TLB¡G4 KB Pages, 4-way set associative, 128 entries | B4H | ¸ê®Æ TLB¡GKB Pages, 4-way set associative, 256 entries |
·í¥H EAX=80000000H ¬°°Ñ¼Æ¡A°õ¦æ CPUID «ü¥O«á¡AEAX ·|Åܦ¨©µ¦ù¥\¯àªº³Ì¤j°Ñ¼ÆÈ¡C¦Ó EBX¡BECX¡BEDX ªºªð¦^È·|¨Ì¾Ú»s³y°Ó¤£¦P¦Ó¤£¦P¡A¹ï^¯Sº¸ªº CPU ¨ÓÁ¿¡A³o¤TӼȦs¾¹ªºªð¦^ȵL·N¸q¡F¹ï AMD ¨ÓÁ¿¡A³o¤TӼȦs¾¹ªºªð¦^È©M»P EAX=0 ªºªð¦^È·N¸q¤@¼Ë¡C
³oÓ©µ¦ù¥\¯àªºªð¦^È¡A¨â¤j CPU ¼t°Óªºµ²ªG¤£¦P¡C^¯Sº¸ªº CPU ¥u¦³ ECX¡BEDX ¦³¥Î¡A¦p¤Uªí¡G
ECX ªð¦^È | |||
¦ì¤¸ | ÁY¼g | ¦WºÙ | »¡¡@©ú ¦¹¦ì¤¸¬° 1 ®É |
0 | LAHF | LAHF/SAHF | ¦b x86-64 ¼Ò¦¡®É¡ALAHF ©M SAHF «ü¥O¥i¥H¨Ï¥Î |
1¡ã31 | «O¯d | ||
EDX ªð¦^È | |||
0¡ã10 | «O¯d | ||
11 | SYSCALL | SYSCALL/SYSRET | ¤ä´© SYSCALL¡BSYSRET «ü¥O |
12¡ã19 | «O¯d | ||
20 | XD bit | Execution Disable Bit | ¤ä´© XD Bit |
21¡ã28 | «O¯d | ||
29 | Intel® 64 | Intel®64 Instruction Set Architeture | ¤ä´© IA64 |
30¡ã31 | «O¯d |
AMD ªº CPU ¥H EAX=80000001H ¬°°Ñ¼Æ°õ¦æ CPUID «á¡AEAX ªºªð¦^È»P¥H 1 °õ¦æ CPUID ªºªð¦^ȬۦP¡Aªí¥Ü Family¡BModel¡BStepping¡K¡K¡CEBX ªºªð¦^È°O¿ý©µ¦ùªº Brand ID¡AECX¡BEDX ªð¦^È«h¬O¤@¨ÇÂø¶µªº¸ê®Æ¡A¨£¤Uªí¡G
EBX ªð¦^È | |||
¦ì¤¸ | ÁY¼g | ¦WºÙ | »¡¡@©ú ¦¹¦ì¤¸¬° 1 ®É |
0¡ã15 | Brand ID | Brand ID | |
16¡ã27 | «O¯d | ||
28¡ã31 | PkgType | Package Type | |
ECX ªð¦^È | |||
¦ì¤¸ | ÁY¼g | ¦WºÙ | »¡¡@©ú ¦¹¦ì¤¸¬° 1 ®É |
0 | LahfSahf | LAHF/SAHF | ¦b x86-64 ¼Ò¦¡®É¡ALAHF ©M SAHF «ü¥O¥i¥H¨Ï¥Î¡A»P^¯Sº¸ CPU ¬Û¦P |
1 | CmpLegacy | ||
2 | SVM | Secure Virtual Machine | |
3 | ExtApicSpace | ||
4 | AltMovCr8 | ||
5 | ABM | Advanced Bit Manipulation | ¤ä´© LZCNT «ü¥O |
6 | SSE4A | ¤ä´© EXTRQ¡BINSERTQ¡BMOVNTSS¡BMOVNTSD «ü¥O | |
7 | MisAlignSSE | Misaligned SSE Mode | |
8 | 3DNowPrefetch | ¤ä´© PREFETCH¡BPREFETCHW «ü¥O | |
9 | OSVW | OS Visible Workaround | ¤ä´© OS-Visible Workaround |
10¡ã11 | «O¯d | ||
12 | SKINIT | ¤ä´© SKINIT¡BSTGI¡BDEV «ü¥O | |
13 | WDT | ¤ä´© Watch Dog Timer | |
14¡ã31 | «O¯d | ||
EDX ªð¦^È | |||
¦ì¤¸ | ÁY¼g | ¦WºÙ | »¡¡@©ú ¦¹¦ì¤¸¬° 1 ®É |
0¡ã10 | «O¯d | ||
11 | SysCallSysRet | SYSCALL/SYSRET | ¤ä´© SYSCALL¡BSYSRET «ü¥O¡A»P^¯Sº¸ CPU ¬Û¦P |
12¡ã19 | «O¯d | ||
20 | XD bit | Execution Disable Bit | ¤ä´© XD Bit |
21¡ã28 | «O¯d | ||
29 | LM | Long Mode | |
30¡ã31 | «O¯d |
³sÄò¥H 80000002H¡B80000003H¡B80000004H ¬°°Ñ¼Æ°õ¦æ CPUID ¥i¥H±o¨ì³oÁû CPU ªº»s³y¼t°Ó¦WºÙ»P CPU ªº¸Ô²Ó¦WºÙ¡A¥¦Ìªð¦^®É¡A·|§â³o¨Ç¤å¦r¦r¦ê¦s¦b EAX¡BEBX¡BECX¡BEDX ¦r¦êùØ¡C¥H¤p¤ì°¸ªº®à¤W¾÷ Athlon 64 X2 3600+ ¬°¨Ò¡G
³Ì«á§â³o¨Ç¦r¦ê¦X°_¨Ó¡AÅܦ¨¤@Ó´yz CPU »s³y°Ó¤Î CPU ¦WºÙªº ASCIIZ ¦r¦ê¡A¡yAMD Athlon(tm) 64 X2 Dual Core Processor 3600+¡z¡Cª`·N¨ì¡A¦¹¤TÓ©µ¦ùªº CPUID ¥\¯à©Ò±o¦r¦ê·|¥H 0 ·í°µµ²§À¡C
80000005H ¥\¯à³Q^¯Sº¸ªº CPU «O¯d¤£¨Ï¥Î¡A¦ý«o³Q AMD CPU ¥Î§@°O¿ý¨CӮ֤ߪº²Ä¤@¶¥§Ö¨ú»P TLB ªº©Ê½è¡C©³¤Uªºªí®æ¬O³o¨Çªð¦^È¡G
EAX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã7 | L1ITlb2and4MSize | 2MB ¤À¶®Éªº«ü¥O TLB ¤j¤p ( ¦¹¼ÆȬ°¥H 2MB ¤À¶®É¡A¦³´XÓ±ø¥Ø¶µ¥i¥Î¡FY±ý¨D 4MB ¤À¶¡A«h¬°¦¹¼Æªº¤@¥b ) | |
8¡ã15 | L1ITlb2and4MAssoc | 2MB ©Î 4MB ¤À¶®É¡A«ü¥O TLB ªºÁp¦X¤è¦¡ ( Y¬° 0FFH¡Aªí¥Ü±Ä¥Î¥þÁp¦X¤è¦¡ ) | |
16¡ã23 | L1DTlb2and4MSize | 2MB ¤À¶®Éªº¸ê®Æ TLB ¤j¤p ( Ãþ¦ü¦ì¤¸ 8¡ã15 ) | |
24¡ã31 | L1DTlb2and4MAssoc | 2MB ©Î 4MB ¤À¶®É«ü¥O TLB ªºÁp¦X¤è¦¡ | |
EBX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã7 | L1ITlb4KSize | 4KB ¤À¶®Éªº«ü¥O TLB ¤j¤p | |
8¡ã15 | L1ITlb4KAssoc | «ü¥O TLB Áp¦X¤è¦¡ | |
16¡ã23 | L1DTlb4KSize | 4KB ¤À¶®Éªº¸ê®Æ TLB ¤j¤p | |
24¡ã31 | L1DTlb4KAssoc | 4KB ¤À¶®É¸ê®Æ TLB ªºÁp¦X¤è¦¡ | |
ECX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã7 | L1DcLineSize | ²Ä¤@¶¥¸ê®Æ§Ö¨ú½u¤j¤p¡A¥H¦ì¤¸²Õ¬°³æ¦ì | |
8¡ã15 | L1DcLinesPerTag | ²Ä¤@¶¥¸ê®Æ§Ö¨ú¡A¨C tag ©Ò§t§Ö¨ú½u¦h¤Ö | |
16¡ã23 | L1DcAssoc | ²Ä¤@¶¥¸ê®Æ§Ö¨úªºÁp¦X¤è¦¡ | |
24¡ã31 | L1DcSize | ²Ä¤@¶¥¸ê®Æ§Ö¨ú¤j¤p¡A¥H KB ¬°³æ¦ì | |
EDX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã7 | L1DcLineSize | ²Ä¤@¶¥«ü¥O§Ö¨ú½u¤j¤p¡A¥H¦ì¤¸²Õ¬°³æ¦ì | |
8¡ã15 | L1DcLinesPerTag | ²Ä¤@¶¥«ü¥O§Ö¨ú¡A¨C tag ©Ò§t§Ö¨ú½u¦h¤Ö | |
16¡ã23 | L1DcAssoc | ²Ä¤@¶¥«ü¥O§Ö¨úªºÁp¦X¤è¦¡ | |
24¡ã31 | L1DcSize | ²Ä¤@¶¥«ü¥O§Ö¨ú¤j¤p¡A¥H KB ¬°³æ¦ì |
80000006H ¥\¯à³Q Intel ¥Î¨Ó´yz²Ä¤G¶¥§Ö¨úªº©Ê½è¡A³o²Ä¤G¶¥§Ö¨úªº©Ê½è¶È°O¿ý¦b ECX ùØ¡AEAX¡BEBX¡BEDX ³£«O¯d¦Ó¨S¦³¥Î¨ì¡C©³¤U¬O ECX ªºªð¦^È¡G
ECX ªð¦^È | |||
¦ì¤¸ | »¡¡@©ú | ||
0¡ã7 | ²Ä¤G¶¥§Ö¨úªº Line Size¡A¥H¦ì¤¸²Õ¬°³æ¦ì | ||
8¡ã11 | «O¯d¤£¥Î | ||
12¡ã15 | ²Ä¤G¶¥§Ö¨úªº Associativity¡G 00¡GDisable¡@¡@01¡Gª½±µ¹ïÀ³¡@¡@02¡G2 way¡@¡@04¡G4 way 06¡G8 way¡@¡@¡@08¡G16 way¡@¡@¡@0F¡GFull | ||
16¡ã31 | ²Ä¤G¶¥§Ö¨ú¤j¤p¡A¥H KB ¬°³æ¦ì¡C( 1KB¡×1024 Ӧ줸²Õ ) |
80000006H ¥\¯à³Q AMD CPU ¥Î§@°O¿ý¨CӮ֤ߪº²Ä¤G©Î²Ä¤T¶¥§Ö¨ú»P²Ä¤G¶¥ TLB ªº©Ê½è¡C¤£¹L¦b EAX=80000006H ¥\¯àªºªð¦^Ȥ¤¡AÁp¦X¤è¦¡¶È¦û¥|Ӧ줸¡A¤£¯àª½±µ¥H¼ÆȪí¥ÜÁp¦X¤è¦¡¡A¦Ó¬O¥H¤Uªíªí¥Ü¡G
¼ÆÈ | Áp¦X¤è¦¡ | ¼ÆÈ | Áp¦X¤è¦¡ | |
0 | L2/L3/TLB ¸T¥Î | 1 | ª½±µ¹ïÀ³ | |
2 | 2-way associative | 4 | 4-way associative | |
6 | 8-way associative | 8 | 16-way associative | |
0Ah | 32-way associative | 0Bh | 48-way associative | |
0Ch | 64-way associative | 0Dh | 96-way associative | |
0Eh | 128-way associative | 0Fh | fully associative |
©³¤U´N¬O EAX=80000006H ¥\¯àªºªð¦^È¡G
EAX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã11 | L2ITlb2and4MSize | ²Ä¤G¶¥«ü¥O TLB 2MB/4MB ªº±ø¥Ø¼Æ | |
12¡ã15 | L2ITlb2and4MAssoc | ²Ä¤G¶¥«ü¥O TLB 2MB/4MB ªºÁp¦X¤è¦¡ | |
16¡ã27 | L2DTlb2and4MSize | ²Ä¤G¶¥¸ê®Æ TLB 2MB/4MB ªº±ø¥Ø¼Æ | |
28¡ã31 | L2DTlb2and4MAssoc | ²Ä¤G¶¥¸ê®Æ TLB 2MB/4MB ªºÁp¦X¤è¦¡ | |
EBX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã11 | L2ITlb4KSize | ²Ä¤G¶¥«ü¥O TLB 4KB ªº±ø¥Ø¼Æ | |
12¡ã15 | L2ITlb4KAssoc | ²Ä¤G¶¥«ü¥O TLB 4KB ªºÁp¦X¤è¦¡ | |
16¡ã27 | L2DTlb4KSize | ²Ä¤G¶¥¸ê®Æ TLB 4KB ªº±ø¥Ø¼Æ | |
28¡ã31 | L2DTlb4KAssoc | ²Ä¤G¶¥¸ê®Æ TLB 4KB ªºÁp¦X¤è¦¡ | |
ECX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã7 | L2LineSize | ²Ä¤G¶¥§Ö¨ú½u¤j¤p¡A¥H¦ì¤¸²Õ¬°³æ¦ì | |
8¡ã11 | L2LinesPerTag | ²Ä¤G¶¥§Ö¨ú¤¤¡A¨C tag ©Ò§t§Ö¨ú½u¼Æ¥Ø | |
12¡ã15 | L2Assoc | ²Ä¤G¶¥§Ö¨úªºÁp¦X¤è¦¡ | |
16¡ã31 | L2Size | ²Ä¤G¶¥§Ö¨úªº¤j¤p¡A¥H KB ¬°³æ¦ì | |
EDX ªð¦^È | |||
¦ì¤¸ | ¦WºÙ | »¡¡@©ú | |
0¡ã7 | L3LineSize | ²Ä¤T¶¥§Ö¨ú½u¤j¤p¡A¥H¦ì¤¸²Õ¬°³æ¦ì | |
8¡ã11 | L3LinesPerTag | ²Ä¤T¶¥§Ö¨ú¤¤¡A¨C tag ©Ò§t§Ö¨ú½u¼Æ¥Ø | |
12¡ã15 | L3Assoc | ²Ä¤T¶¥§Ö¨úªºÁp¦X¤è¦¡ | |
16¡ã17 | «O¯d | ||
18¡ã31 | L3Size | ²Ä¤T¶¥§Ö¨úªº¤j¤p¡A¥H KB ¬°³æ¦ì |
©³¤U¤p¤ì°¸¼g¤F¤@Óµ{¦¡¡ACPUID.ASM ¯à¦b¤u§@°Ï¤¤Åã¥Ü¥Ñ CPUID «ü¥O¶Ç¦^¨Óªº¸ê®Æ¡C³oÓµ{¦¡¦b¤£¦Pªº CPU ¤§¤U°õ¦æµe±¤£¦P¡A©³¤U¬O¦b¤p¤ì°¸¤@¥x CPU ¬° AMD64X2 3600¡Ï ªº®à¤W«¬¹q¸£°õ¦æ CPUID.ASM ®Éªºµe±¡G
![]() ![]() |
ŪªÌ¥i«ö¦¹³B¤U¸üì©l½X¡C¸ÑÀ£ÁY«á¡A·|±o¤@ CPUID ¤l¥Ø¿ý¡A¥H¸Ó¤l¥Ø¿ýùتº CPUID.MAK ¬°°Ñ¼Æ¡A°õ¦æ NMAKE.EXE¡A§Y¥i±o CPUID.EXE¡G
E:\HomePage\SOURCE\CPUID>nmake -f cpuid.mak [Enter]
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.
rc CPUID.rc
ml CPUID.asm /link CPUID.res
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: CPUID.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/SUBSYSTEM:WINDOWS
"CPUID.obj"
"/OUT:CPUID.exe"
"CPUID.res"
E:\HomePage\SOURCE\CPUID>
¦b³B²z WM_CREATE °T®§ùØ¡ACPUID.ASM ¥ýÀˬd CPU ¬O§_¯à°õ¦æ CPUID «ü¥O¡A±µµÛ¨ú±o¤å¦r°ª«×¡A¦s©ó tm µ²ºcÅéùØ¡A³oÓÅܼƱN¦b WM_PAINT °T®§¤¤¥ÎµÛ¡C¦b WM_PAINT °T®§ùØ¡ACPUID.ASM ·|§â¥Ñ CPUID ©Ò±oªº¸ê®Æ¦L¦b¿Ã¹õ¤W¡A³o¨Ç¸ê®Æ¥i¯à¤£¥u¤@¦æ¡A¨C¤@¦æ©Ò¦û¾Úªº°ª«×¬° tm.tmHeight »P tm.tmExternalLeading ¤§©M¡A¦³¤F¤å¦r°ª«×¤~¯à¨M©w²Ä¤G¡B¤T¡B¥|¡K¡Kªº¦ì¸m¡C
±µµÛ¦b WM_CREATE ³B²zªº¬O§âµøµ¡²¾¨ì¿Ã¹õªº¥¿¤¤¥¡¡C¤p¤ì°¸¹w³]¤u§@°Ï°ª«×¬O 200¡A¬Gµøµ¡°ª«×¬°¤u§@°Ï°ª«×¦A¥[¤W¼ÐÃDÄæ°ª«×¡B¿ï³æ°ª«×¤Î¤W¤U¨âÓÃä®Ø«p«×¡A³o¨Ç¤j¤p¥i°Ñ¦Ò²Ä 14 ³¹¦³Ãö GetSystemMetrics ªº»¡©ú¨ú±o¡Cµøµ¡¥ª¤W¨¤ªº Y ®y¼Ð§Y¬°¿Ã¹õ°ª«×´î¥hµøµ¡°ª«×¦A°£¥H 2¡C¦P²z¡Aµøµ¡¥ª¤W¨¤ªº X ®y¼Ð¤]¬O¦p¦¹¡A¥u¬Oµøµ¡¼e«×Åܦ¨¤u§@°Ï¼e«×¥[¤W¥ª¥k¨âÃ䪺Ãä®Ø«p«×¡C
WM_CREATE ±µµÛªº¤u§@¡A¬O¥H EAX=0 °õ¦æ CPUID «ü¥O¡A¨ú±o¦³´X¶µ°ò¥»¥\¯à¡A¨Ã±q EBX ¤§È§PÂ_ CPU ¬O¨º¤@®a¼t°Óªº²£«~¡A¨Ã°O¿ý¦b bCPU ÅܼÆùØ¡CY bCPU¡×1¡Aªí¥Ü¬O Intel ªº CPU¡FY bCPU¡×2¡Aªí¥Ü¬O AMD ªº CPU¡K¡K¡C±µµÛ¦A¨Ì¾Ú EAX¡A©ó¥D¿ï³æ¤¤«Ø¥ß¤@¦W¬°¡yBasci¡zªº¼u¥X¿ï³æ¡A¨ä¤UÄݤl¿ï³æ¿ï¶µ¤À§O¬O¡y0000 0000H¡z¡B¡y0000 0001H¡zµ¥µ¥¡C·í¨Ï¥ÎªÌ«ö¤U¡y0000 0000H¡z¿ï¶µ®É¡Aªí¥Ü CPU ¥H 00000000H ¬°°Ñ¼Æ°õ¦æ CPUID «ü¥O¡AµM«á§âµ²ªGÅã¥Ü¦b¤u§@°Ï¤W¡C
WM_CREATE ±µ¤U¨Óªº¤u§@¬O«Ø¥ß¡yExtend¡z¼u¥X¿ï³æ¤Î¨ä¤l¿ï³æ¤¤ªº¿ï¶µ¡A¤£ºÞ¬O¡yBasci¡z©Î¡yExtend¡z¼u¥X¿ï³æ³£¬O©I¥s AddMenu °Æµ{¦¡§¹¦¨¡CAddMenu ¦³¤TӰѼơG
AddMenu proto dMax:DWORD,StrAddr:DWORD,Position:DWORD
dMax ¬O¥H 0 ©Î 80000000H °õ¦æ CPUID «áªº¼ÆÈ¡A¥¦³Q·í§@°Ñ¼Æ¶Çµ¹ AddMenu¡A¥¦¨M©w¤F AddMenu ¦b¤l¿ï³æ¤¤¸Ó²£¥Í´Xӿﶵ¡A¥H¤Î¦U¿ï¶µ¦WºÙ¡B¿ï¶µÃѧO½X ( ID )¡C¨Ò¦p dMax µ¥©ó 2 ®É¡AÀ³¸Ó·|¦³¡y0000 0000H¡z¡B¡y0000 0001H¡z¡B¡y0000 0002H¡z¤Tӿﶵ¡A¨ä ID ¤À§O¬O 100H¡B101H¡B102H¡C¦ý¦pªG¬O dMax ¬° 80000008H¡A«h AddMenu ·|©¿²¤³Ì°ªªº¦ì¤¸²Õ¡A¥B¦]¬° 80000002H ¨ì 80000004H ³o¤TÓ©µ¦ù¥\¯à¦@¦P¨ú±o CPU ªº»s³y¼t°Ó¦WºÙ»P CPU ªº¸Ô²Ó¦WºÙ¡A¦]¦¹¦b¤l¿ï³æ¤¤¥u¥Î¡y8000 0002H¡zªí¥Ü¡A¬G¦b¤l¿ï³æùØ¥X²{ªº¬O¡y8000 0000H¡z¡B¡y8000 0001H¡z¡B¡y8000 0002H¡z¡B¡y8000 0005H¡z¡B¡y8000 0006H¡z¡B¡y8000 0007H¡z¡B¡y8000 0008H¡z7 Ó¤l¿ï³æ¡A¨ä ID ¤À§O¬O 900H¡B901H¡B902H¡B905H¡B906H¡B907H¡B908H¡C
AddMenu ªº²Ä¤GӰѼƬO«ü¦V¥D¿ï³æùتº¼u¥X¿ï¶µ¦r¦ê¡A¥ç§Y¡yBasic¡z»P¡yExtend¡z¡CAddMenu ªº²Ä¤TӰѼƬO¼u¥X¿ï¶µ¦b¥D¿ï³æªº¦ì¸m¡A¥ç§Y¡yBasic¡z¡B¡yExtend¡z¦ì¸m¤À§O¬O 1¡B2¡A³o¬O¦]¬°¦ì¸m 0 ¬O¡y°h¥X¡z¼uªì¿ï¶µ¡C
WM_CREATE ³Ì«áªº¤u§@¬O©I¥s AddView »P help ¨âӰƵ{¦¡¡C«eªÌ¬O§â¡yÀ˵ø¡z¼u¥X¿ï¶µ¤Î¨ä¤l¿ï³æ¥[¶i¥D¿ï³æùØ¡A«áªÌ¬O§â szHelp ¦r¦êÅã¥Ü©ó¤u§@°Ï¤º¡C
·í§ÚÌ¥H¬Y¤@°Ñ¼Æ°õ¦æ CPUID «ü¥O®É¡A±`¶Ç¦^³\¦h¸ê®Æ¡A³o¨Ç¸ê®Æ¤£¬O¥Î¤@¦C¦r¦êªí¥Ü´N¥i¥H¤F¡A³o¨Ç¸ê®Æ³Q CPUID.ASM ùتº³\¦h¹³ eax_?000_000? °Æµ{¦¡¾ã²z¦¨¼ÆÓ¦r¦ê¡A³o¨Ç¦r¦ê³£¦s¦b szString °}¦CùØ¡Aº¸«á WM_PAINT ¦A§â³o¼ÆÓ¦r¦êÅã¥Ü©ó¤u§@°Ï¤W¡C¨C¤@¦C¦r¦êªº°ª«×¬O tm.tmHeight¡Ïtm.tmExternalLeading¡A¦Ó¨CÓ¦r¦êªº°_©l¦ì§}«h¦s©ó pString °}¦CùØ¡C
¥H¨Ï¥ÎªÌ«ö¤U¿ï¶µ eax_0000_0001H ¬°¨Ò¤l¡A³o®É¦b WM_COMMAND °T®§¤¤·|©I¥s°Æµ{¦¡ eax_0000_0001¡Aeax_0000_0001 °Æµ{¦¡·|¥ý§â¡y¥\¯à¡G00000001H¡z¦s¤J szString °}¦Cªº²Ä¹sÓ¤¸¯À¡A¨Ã§â¦¹¦ì§}¦s¦b pString °}¦Cªº²Ä¹sÓ¤¸¯ÀùØ¡C±µµÛ¬O¤@ӪŦr¦ê¥H°µµøı¤Wªº¤À¹j¡A¦¹ªÅ¦r¦ê¦ì§}¬O szAppName+5¡A§Y¬° 0¡A¨Ã§â¦¹¦ì§}¦s¤J pString ªº²Ä¤@Ó¤¸¯À¡ApString[4]¡AùØ¡C±µµÛ¥H 1 ¬°°Ñ¼Æ°õ¦æ CPUID «ü¥O¡A¤p¤ì°¸§â©Ò±o¸ê®Æ¦s¤J SavedEAX¡BSavedEBX¡BSavedECX¡BSavedEDX ¥|ÓÅܼÆùØ¡AµM«á¦A¾ã²z¦¨ Family¡BModel¡Kµ¥¸ê®Æ¡C·í°õ¦æ§¹«á¡ApString °}¦C¤§¤º®e¬°¡G
004040C0 74 44 40 00 55 41 40 004040D0 00 84 44 40 00 B3 44 40 00 D1 44 40 00 55 41 40 004040E0 00 DE 44 40 00 00 00 00 00 00 00 00 00 00 00 00 004040F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00404100 00 00 00 00 00 00 00 00 00
©³¤U«h¬O szString °}¦C³¡¥÷¤º®e¡A¥¦¬O¥Ñ¤£µ¥ªøªº¦r¦ê²Õ¦¨ªº°}¦C¡G
00404470 A5 5C AF E0 A1 47 30 30 30 30 30 30 ¥\¯à¡G000000 00404480 30 31 48 00 20 20 20 20 46 61 6D 69 6C 79 3A 30 01H. Family:0 00404490 46 48 20 20 20 20 20 20 20 4D 6F 64 65 6C 3A 34 FH Model:4 004044A0 42 48 20 20 20 20 20 53 74 65 70 70 69 6E 67 3A BH Stepping: 004044B0 32 48 00 45 78 74 2E 46 61 6D 69 6C 79 3A 30 30 2H.Ext.Family:00 004044C0 48 20 20 20 45 78 74 2E 4D 6F 64 65 6C 3A 34 48 H Ext.Model:4H 004044D0 00 42 72 61 6E 64 20 49 44 3A 30 30 48 00 A4 E4 .Brand ID:00H.¤ä 004044E0 B4 A9 20 46 50 55 20 4D 4D 58 20 53 53 45 20 53 ´© FPU MMX SSE S 004044F0 53 45 32 20 53 53 45 33 00 SE2 SSE3.
pString ¬O¤@Ó¦ì§}©Ò²Õ¦¨ªº°}¦C¡A²Ä¹sÓ¤¸¯À¡A00404474¡A´N¬O WM_PAINT ±N¦b¤u§@°Ï¤¤¦L¥Xªº²Ä¹s¦C¦r¦ê¦ì§}¡A§ä¨ì 00404474 ¦ì§}ªº¤º®e´N¬O¡y¥\¯à¡G00000001H¡z¦r¦ê¡C²Ä¤@Ó¤¸¯À¡A00404155¡A´N¬On¦L¥Xªº²Ä¤@¦C¦r¦ê¦ì§}¡AÁöµM¨S¦b¤W±Åã¥Ü¡A¦ý¬O´N¬O¤@ӪŦr¦ê¡C²Ä¤GÓ¤¸¯À¡A00404484¡A©Ò«üªº¦ì§}¬O¡y Family:0FH Model:4BH Stepping:2H¡z¦r¦ê¡A¤]´N¬O¦b¤u§@°Ïªº²Ä¤G¦C¦r¦ê¡C¨ä¾l¨Ì¦¹Ãþ±À¤F¡C¦Ü©ónÅã¥Üªº¦Cz¦³´X¦C¡A«h¬O¦s©ó wLine ùØ¡C
ÁöµM¥H 2 ¬°°Ñ¼Æ¡A°õ¦æ CPUID «ü¥O¡A¥i¥H±o«Ü¸ÔºÉªº CPU §Ö¨ú©Ê½è¡A¤£¹L¦¹³B¤p¤ì°¸¥u¼¶¼g¯à°÷§ä¨ì L1¡BL2¡BL3 §Ö¨ú©Ê½è¡C¦]¬° Intel CPU ©Ò¶Ç¦^ªº¼ÆȬO¥H¤@Ӧ줸²Õ¬°·j´MÈ¥h·j´M¤@ӫܤjªºªí®æ¨Ó¨M©w§Ö¨ú©Ê½è¡A¦P®É¨C¤@ºØ§Ö¨ú ( L1¡BL2¡BL3 µ¥ ) ªí®æªº¸ê®Æ¶µ¼Æ³£¤£¦P¡A¨Ò¦p L1 «ü¥O§Ö¨ú¦bªí®æ¤¤¶È¤T¶µ¡F¦Ó L1 ªº¸ê®Æ§Ö¨ú«h¦³ 7 ¶µ¡A©³¤U´N¬O CPUID.ASM ì©l½X¤¤¦³Ãöªí®æªº¸ê®Æ¡G
;^¯Sº¸CPUªºL1«ü¥O/¸ê®Æ§Ö¨ú ¼È¦s¾¹È ¤j¤p way lines IntelL1i BYTE 6h, 8, 4, 32 BYTE 8h, 16, 4, 32 BYTE 30h, 32, 8, 64 IntelL1d BYTE 0ah, 8, 2, 32 BYTE 0ch, 16, 4, 32 BYTE 2ch, 32, 8, 64 BYTE 60h, 16, 8, 64 BYTE 66h, 8, 4, 64 BYTE 67h, 16, 4, 64 BYTE 68h, 32, 4, 64
¤p¤ì°¸¦b eax_0000_0002 °Æµ{¦¡ùØ¡A¨C¥H³£ 32 ¦ì¤¸ªº¼È¦s¾¹¥h¤ñ¹ïªí®æ¤¤ªº¸ê®Æ¡Cªí®æ¤¤¦³´X¶µ¸ê®Æ¡Bªí®æ¦ì§}¤À§O¦s¦b CL¡BESI ùØ¡A¦A¥h©I¥s find_cache_data °Æµ{¦¡¡C¦b find_cache_data °Æµ{¦¡ùØ¡A©I¥s find °Æµ{¦¡¥|¦¸¡A³o¥|¦¸¤À§O¬O¥H SavedEAX¡BSavedEBX¡BSavedECX¡BSavedEDX ¬°°Ñ¼Æ¥h¤ñ¹ï ESI ©Ò«üªºªí®æ¸ê®Æ¡C¦Ó¦b find °Æµ{¦¡¤¤«h§ó¶i¤@¨B§â 32 ¦ì¤¸ªº EAX ¤À¦¨¥|Ӧ줸²Õ¡A¥h©I¥s check_al °Æµ{¦¡¥h·j´Mªí®æ¡C
¦pªG§ä¨ìªº¸Ü¡AESI «h·|¦s¤J§Ö¨ú¸ê®Æ¡A¨Ò¦p§Ö¨ú¤j¤p¡BÁp¦X¤è¦¡¡BLine size µ¥µ¥¡Acheck_al ÁÙ·|³]©w ZF¡AµM«á¦A¤@¼h¤@¼hªº§â ZR¡BESI ¶Ç¦^¨ì eax_0000_0002¡y¥D¡zµ{¦¡¤¤¡Aeax_0000_0002 ¤¤¦A©I¥s save_intel_cache_data °Æµ{¦¡¡A§â§ä¨ìªº§Ö¨ú¸ê®Æ¦s¤J¤@Ó¥s°µ dCacheValue ªº°}¦CùØ¡C dCacheValue °}¦C¥Ñ¥|ÓÂù¦r²Õ©Ò²Õ¦¨¡A¨ä°¾²¾¦ì§} 0 ¦s¤J§Ö¨ú¤j¤p¡F°¾²¾¦ì§} 4 ¦s¤JÁp¦X¤è¦¡¡F°¾²¾¦ì§} 8 ¦s¤J§Ö¨ú½u¤j¤p¡F°¾²¾¦ì§} 0CH ¦s¤J Lines per Tag¡C( Intel ªº CPU ¨Ã¨S¦³ Lines per Tag ³o¤@¶µ¡F¦ý¬O AMD ªº CPU ¦³¦¹¶µ¡C)
±µ¤U¨Ó eax_0000_0002 ·|©I¥s set_cache °Æµ{¦¡¡Aset_cache °Æµ{¦¡¥Î¨Ó§â dCacheValue ¤¤ªº§Ö¨ú©Ê½è¡AÂǥѩI¥s wsprintf API Åܦ¨¦r¦ê¡A¦s¦b szString ¦r¦êùØ¡C¤£¹L§Ö¨ú¸ê®Æ¤£¥u¤@¦C¡A¨C¤@¦Cªº¶}©l¦ì§}³£·|³Q°O¿ý¦b pString °}¦CùØ¡A¦Ón¦L¥Xªº¸ê®Æ¦³´X¦C¡A«h¦s©ó wLine ÅܼÆùØ¡C
´«¥y¸Ü»¡¡A¦b©I¥s§¹ eax_0000_0002 ¤§«á¡AwLine ·|¦s©ñ¤u§@°Ï»Ýn¦L¥X´X¦C¦r¦ê¡A¦r¦ê¤º®e«h¦s©ó szString °}¦C¡Cµ¥¨ì WM_PAINT °T®§µo¥Í®É¡A¦A§â³o¨Ç¸ê®ÆÅã¥Ü©ó¤u§@°ÏùØ¡C