|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!+ C+ T3 s. P- @+ i8 l5 _- U G
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
6 v/ ~3 s6 b" W' f另如果要全部代码,可以提供。" R# _0 f' t$ D A. o
1 c6 n, w$ y: {0 x D4 [#include <stdio.h>! L4 Q, Q; ?3 `- C
#include "stdlib.h"" D% C% b6 @9 ?6 L% i
$ L5 N, m3 E, \4 ~main(): X" [4 [" I# V: n9 m" R
{8 R) j. U0 d3 i+ X3 j' b0 w8 v
unsigned long DBase;) k2 X I' X1 q* {) T/ Z! j3 Q
char cA[13];2 Y* l' q9 C* t# b( j; g
_asm) Y; H3 O+ r7 H* ]
{
0 [ B( U3 _& n2 S mov eax, 0/ ?/ n% _" d' F* F
cpuid) i) E4 p5 s/ d) U4 w% I
mov DBase ,eax
6 l* a0 `7 @+ U/ A s mov dword ptr cA ,ebx N# S6 h J# Z/ ?$ u [6 k
mov dword ptr cA+4 ,edx ) \! P0 v7 d- z! Q0 V
mov dword ptr cA+8 ,ecx
. A. l5 M& |& K! M4 a- f0 A" I& a/ B }: ~/ |7 r! J- U* \8 y8 H7 f
cA[12] = '\0';
* R( y( p2 f. Y printf( "CPU factory: %s\n", cA );
6 D4 T( Q. C% ?( `6 N system("pause");! _: N0 v8 n& Z1 W
} |
|