|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!+ Y; C* l: R0 i& Y
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊! d0 V& Z' H0 s* y' g. N' q: a! c
另如果要全部代码,可以提供。) M, W2 x, n6 h
0 E, W p$ i* K8 a: T, E6 E
#include <stdio.h>- D4 W) l8 {! e0 Y% w8 b5 D; o
#include "stdlib.h"
$ p" x+ V- K$ c P {5 L# R& q' ` Q- f! r
main()
4 f' I) Q, T& y{
/ ~7 B2 j2 r" M% lunsigned long DBase;
' v( V s' `+ p+ Q, A/ {) k2 Xchar cA[13];
: u8 y: @% D& N! O( ]_asm6 @) x! O) E& g# @& {4 A
{
6 \3 @9 ~" L( P mov eax, 0
& b5 v, ^' ^3 H2 S cpuid1 m$ O5 S2 q/ i
mov DBase ,eax
: l( v- e; B0 H3 g0 C; S4 b mov dword ptr cA ,ebx- a! D" f& _$ u0 V( g9 h
mov dword ptr cA+4 ,edx
]+ f9 j8 i8 X( q* E mov dword ptr cA+8 ,ecx 0 z/ l+ t, z/ u
}! G& m1 ~6 ]! z! c0 R
cA[12] = '\0';
3 E4 Y$ S8 g. J7 S: y' A+ M printf( "CPU factory: %s\n", cA );
U! Z, [' ~. D' K* I! U system("pause");9 z7 K3 n7 e) A4 _# {' K
} |
|