|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
: x' m. H: q' i: H5 i* W; h或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
1 ]1 ]6 \3 r1 n8 T2 a另如果要全部代码,可以提供。$ C3 c9 K$ B9 m) j$ W8 n
/ h) n! K' M0 P
#include <stdio.h>
# e. y1 z. H. {6 S" v$ \8 u#include "stdlib.h"
8 r5 S. Y: n% L) w* h5 P Z3 ?4 o- w0 W
main()
8 W* t0 J" n: G, }7 i" _{# ^. B1 P* g% R
unsigned long DBase;
' D6 p. V" G- |char cA[13];) X: T8 Q( \8 j- Q A. e
_asm
5 `/ k- _8 X3 Y6 r; o h( W {
& b1 O2 F7 A1 M! h5 X( u' \. J7 b mov eax, 0
" ~2 e+ f) y! Z- C9 q cpuid1 [+ Z0 }! m+ l
mov DBase ,eax% F$ M6 v& |, |7 F; E1 A
mov dword ptr cA ,ebx, \ E3 q. B1 ^8 d6 @
mov dword ptr cA+4 ,edx
/ }. s7 Z7 Z; N, V) z, a* q mov dword ptr cA+8 ,ecx f( N5 h6 m; R. L& n% U$ i$ I
}* @1 I6 P% h3 M3 Y" T% [
cA[12] = '\0'; 2 r+ T* V5 Q$ n9 A0 ^
printf( "CPU factory: %s\n", cA );/ }8 ?# p' b; z# z8 s* \ r
system("pause");
) n9 X1 j0 |! Z$ H; V} |
|