|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
. @9 K4 N; N* O3 ~或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!; z* _' W) U& M+ C: L
另如果要全部代码,可以提供。; l Y/ B5 ~# d4 _
1 {) n2 X9 j; Q! ]4 r
#include <stdio.h>
8 P4 ~3 M# ?4 n3 `- a3 ?, @( V" y#include "stdlib.h"
+ c. E5 g9 G; T1 e9 v* Y' q' i1 h. L* b3 a
main()
( T6 v. S9 ], J9 |& X{0 N0 [; A9 M, e& u$ ]% l3 @
unsigned long DBase;
' M- L8 V* K6 K. S8 Q; g. ~char cA[13];3 }6 ?! _/ i' A, I( u
_asm4 g4 B! @- C- y6 V W+ q" w) I: L5 A
{
. N; ^6 v+ P# P/ ^. a mov eax, 0) R F' L5 Z5 t. P5 i3 h U+ J
cpuid
* @* m" O+ s* l- y8 w# b mov DBase ,eax0 X n" y( b. r. Y/ j$ R, t
mov dword ptr cA ,ebx' U, K* d' S. A) K, E1 `
mov dword ptr cA+4 ,edx
: p: r/ k2 Z I6 k mov dword ptr cA+8 ,ecx
: S7 S5 s! I' f& m0 f& \ }
! w% J. P$ x! t4 ?1 }, d cA[12] = '\0'; ! v2 w3 Z4 w3 p1 b8 Z
printf( "CPU factory: %s\n", cA ); z# Y2 g1 Y3 Y _# ]+ {' o
system("pause");$ p. K; u1 Q+ m+ ?
} |
|