|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!# K. S( g2 R1 ^! h' G6 A: `' K5 ]# k) N
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
# J" T3 X0 A5 H, y另如果要全部代码,可以提供。
4 H; t2 n: F& d1 J* _7 M" g( r( m$ @4 U" R
#include <stdio.h>
! v: N- D# S; `; M, L#include "stdlib.h"- h: o# ?: i% t2 r& W" U& r
) ^4 T% k" N, F, L0 ^% A0 Ymain()
+ p2 f& Z& S* ~4 ~/ u4 `% _2 ~{7 S( ~3 d; ]3 q
unsigned long DBase;
: Y% {" _- f2 e8 H7 @6 echar cA[13];5 | r+ n. ~* K1 L: O) C
_asm
* ]- L& m$ k7 @" B {
0 N# e8 v! d! P) W3 E1 d+ J mov eax, 0
! l. A" L: z# T3 |1 l# i: I cpuid
# s3 C; j7 c$ O9 `% X/ W4 n1 [ mov DBase ,eax
( r. y7 u' h2 H) r9 w8 R mov dword ptr cA ,ebx+ [/ W+ C W, D! r% A
mov dword ptr cA+4 ,edx
1 ]* w7 \5 k0 _- X, h4 D' q mov dword ptr cA+8 ,ecx * [7 |* S5 Z8 E
}
7 W, ` Q) K& x! F/ F cA[12] = '\0'; / E5 }9 f+ }& Q- \9 r6 Q% H3 x
printf( "CPU factory: %s\n", cA );
# E$ n5 |, D4 j: S4 @0 ` system("pause");4 @0 S! @8 }# ^
} |
|