|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!8 N- a$ Y4 P* m; X4 p
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
1 f S$ F2 W. t) S" i# R) Y另如果要全部代码,可以提供。
! o/ G0 A: X, H* e B- c9 X ]# V5 E& p" ?/ N
#include <stdio.h>5 W% H# \: n( p g l
#include "stdlib.h"* C; `% h6 n. }7 ]/ E
/ D5 m/ c, p: t- Vmain()
' A$ @' d% V _& n{: {# q+ `- Q0 S3 e0 D' Q; r
unsigned long DBase;; q/ {( v: d+ |# c
char cA[13];
0 T5 v/ }5 E' K- Y8 P" e_asm- ]7 l6 e$ P7 k ^' d/ j
{) r8 p1 R! }; T1 r0 \+ r
mov eax, 0( U4 H+ m% X) m& w
cpuid
. F* Q0 A `/ m% V8 l# d mov DBase ,eax3 u& }- k' Z. f& D
mov dword ptr cA ,ebx0 ~" W! N2 r. @
mov dword ptr cA+4 ,edx
4 d; Y. Q4 F9 E8 V mov dword ptr cA+8 ,ecx
' F i. N! Y# ? I6 W/ [ }
8 V: M8 R' v) ?6 p, V { cA[12] = '\0'; ) c, X! u, ?& e$ C) w
printf( "CPU factory: %s\n", cA );: [. [4 Y& K+ }
system("pause");$ i8 T- ]; q. v0 j4 j. m' q
} |
|