|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
# Y1 w2 d8 T+ i4 G* p. m4 u或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!6 K/ }3 L& D6 R# l5 j
另如果要全部代码,可以提供。, {1 z% r' `9 M5 r' u& ~6 U
1 s' s8 D: B! s2 e& `/ X
#include <stdio.h>
$ x# J: y& c/ D) F1 \#include "stdlib.h"1 ]: w8 Z. l: w( ^# T8 h' D' L
& U5 z0 `7 P4 i% m& F! Z, Amain()) y. R) U% }7 S. ^, Q9 u* V; I
{
5 F; f9 Q% \2 y) E5 vunsigned long DBase;) [; a1 U. x9 \9 m: ]5 E" [
char cA[13];
# ?1 t+ R9 q* g3 A: W& |. X2 T' ^: H_asm2 B( U4 J. s3 P! T+ j. c
{: a: T$ _" g* d/ U
mov eax, 0
2 g6 B$ x/ B& ] cpuid* y9 F" X0 |/ o: G
mov DBase ,eax
& ~2 {2 G9 M- I+ \0 z. X; z mov dword ptr cA ,ebx7 |7 e3 o: P+ E+ |4 I
mov dword ptr cA+4 ,edx * Y, ]' h' q4 k7 W- ]; T# B
mov dword ptr cA+8 ,ecx % q& P( I+ [3 j5 k4 k0 A
}' k9 h7 m5 h5 y9 ]" e
cA[12] = '\0';
# S: ]2 r. i8 c. Q. u& x printf( "CPU factory: %s\n", cA );
4 E' {) ~2 }7 J; m0 } system("pause");3 B k* U2 g, I% ]
} |
|