|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
' ~0 n9 w- o3 \- Q( l或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
* K: w( A/ p6 K- _7 p' C另如果要全部代码,可以提供。! p% M4 h. h( V7 z3 o1 |5 ~ |
Q6 a( b0 U/ v! J#include <stdio.h>; e- N& a4 A# s& ?! {8 m
#include "stdlib.h") W* Y; l o6 H* y- r' S+ o
% \9 L% ~& n7 @3 t0 ~4 d% R" @$ Amain(), r8 K. Q( j+ ]9 d7 F! `
{: t, t& Q6 }1 J! Q2 I
unsigned long DBase;4 P7 ]+ \* ?( n+ F
char cA[13];
5 w9 P# T' ]$ V2 H- b3 h_asm( M3 ^" k/ O/ m2 l. w/ T. g8 R: A
{
) u; n+ A" B1 ^2 [% P mov eax, 0) \% h2 V J3 e, S+ ~* M* R' c
cpuid
3 g5 p5 P8 y q# ?2 B) c mov DBase ,eax- t5 F4 E0 z; ]5 q
mov dword ptr cA ,ebx- @' L% F/ X+ j; o# p/ E% X
mov dword ptr cA+4 ,edx
* t d* q' d; H. g* l+ g. F+ j mov dword ptr cA+8 ,ecx
1 l5 S: n u% U) a$ }* s }! }& V2 f" n( ]3 v2 P" ?. _/ t, V5 ^
cA[12] = '\0';
& ]8 q4 h8 [! Q$ j printf( "CPU factory: %s\n", cA );! T9 b0 h- n$ W$ r
system("pause");
! J' h# W4 K0 b: m5 x* W& L} |
|