|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!& w: o- g4 X, _
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
M8 P' h g$ L. a. `另如果要全部代码,可以提供。 L! j' V8 F0 x1 C
5 c b+ _# E" R9 g5 y
#include <stdio.h>5 {- N' \) |; p& s+ |# J4 z
#include "stdlib.h"1 |$ ^- J/ S0 e R
. }/ k6 U' l. g6 bmain()3 V6 E/ ?+ X1 w
{- C- Z- ]% V$ v! | _9 h' s- I6 n
unsigned long DBase;
& j. b8 h$ ~) y3 mchar cA[13];
4 I; f' a+ A! p6 __asm
0 w4 ]5 z% f0 v4 j {
2 j$ p1 S! n5 R1 ^5 ~* ? mov eax, 0
4 d# \ F4 X: Z( r1 h cpuid6 b3 }. B# X3 s: S( J2 r
mov DBase ,eax- W# w4 C( w L7 ~
mov dword ptr cA ,ebx
! e4 \$ ]! d. O; c mov dword ptr cA+4 ,edx # u$ |; S8 V# o, x( b
mov dword ptr cA+8 ,ecx
6 ?' K4 R. ~# K }! s5 _# c5 s1 K5 j5 k/ _
cA[12] = '\0'; S, c& k3 Y/ c5 [* v; O
printf( "CPU factory: %s\n", cA );2 S6 z: g) o; t2 b/ i R
system("pause");
) m2 k( w4 G7 ^- Y; Y' E5 ]} |
|