|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!' j% t0 p) R A7 N0 P
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
$ G4 e; B; s( u4 w( L另如果要全部代码,可以提供。
6 i+ z9 D2 W2 V9 ~% y1 L; _/ J0 b4 C" N2 u( n3 @- d
#include <stdio.h>6 @/ z ^ r9 v
#include "stdlib.h"- ?% K1 W6 R) B* ^, p
0 e! I* X" J7 @( g6 X: Qmain(); o% [3 T1 [0 ~: c B8 I* @
{( V l9 _+ d! X2 T
unsigned long DBase;- |% m; U8 c, @6 W$ g
char cA[13];9 t$ {2 C* N; K) }6 N1 A( k
_asm
9 Y7 h" E# C3 K+ K# w {4 p% l: Y& q; \2 ?
mov eax, 0% C+ @; E ?) U8 K7 M0 p
cpuid; S% K3 \ ?2 m: ~9 s j5 o4 n
mov DBase ,eax9 ^2 J1 @6 x2 D5 E* d
mov dword ptr cA ,ebx# [9 I, I6 V5 M& y; v
mov dword ptr cA+4 ,edx
7 m% X! ] j7 c6 J, M& k0 V+ q& I mov dword ptr cA+8 ,ecx 9 f0 j6 o9 R2 I. ^+ N& X" t+ s9 I
}
5 f" D+ o/ j: C( C: [9 J cA[12] = '\0'; q; _$ t( K0 J8 f5 D/ F5 R: y
printf( "CPU factory: %s\n", cA );
# b4 E! }) Z# T; I5 O: d' N system("pause");
2 y( m4 s- Z* K* g8 d} |
|