|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!! L/ P1 ~& o5 ~& _7 ?
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
; b0 ?& r, B. j4 Z; v$ }! e另如果要全部代码,可以提供。
9 W& U. E$ a2 h5 @) P' i4 F, {5 x/ o5 Q! A3 s& k/ C& }
#include <stdio.h>* E8 V0 t, G4 p7 o
#include "stdlib.h"
4 A1 M" f4 {$ k' s9 O
* a' B \1 l9 H: V- ~& |main()
1 |3 A" ]5 i+ O{
- D6 m k6 U$ q+ gunsigned long DBase;
: m: _: J0 C8 g D1 pchar cA[13];
8 k' G9 P* ]2 P# U_asm
* I |1 f9 n% w' n& I% d {5 S& R/ ?' O! V$ i* B5 \" l: c
mov eax, 0
9 e# j4 a% d5 z8 N. f1 [2 \ cpuid1 W+ X- m3 _' Z8 L5 g. u. c
mov DBase ,eax7 P1 l0 t: X2 |+ d) e* \+ o' C4 c
mov dword ptr cA ,ebx
' x/ m3 m4 H8 ^/ {3 f. B mov dword ptr cA+4 ,edx
+ K, E! e2 q5 Z mov dword ptr cA+8 ,ecx 9 u$ Z; }+ z+ o) T
}
4 m( O! n- r0 W# b0 C0 M cA[12] = '\0';
( z L; {7 V9 K$ a; [$ }' [ printf( "CPU factory: %s\n", cA );- j4 O; ?! }1 n
system("pause");. h* M" V1 f* \! K
} |
|