|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
! E0 `& Q9 r1 x或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!- F1 v; g6 G* o$ F. Q0 I: V
另如果要全部代码,可以提供。
6 P$ t: M% N% t- U d' t/ H3 |& I6 I$ h, w: Z8 R6 o
#include <stdio.h>. V g; H3 d' Q; e1 \% d- \
#include "stdlib.h"
8 i: v2 a; g; i: v+ _
; k8 Q ^$ v9 W: Y Y3 Dmain()
1 O3 l- l# u3 G- v{
1 i2 ]* m3 B- Aunsigned long DBase;
+ ^; U# {$ q; o/ l6 U! z3 Qchar cA[13];
; }) q1 z$ Q/ x) G- g& t_asm
0 t0 b3 x4 p7 |9 a# h0 T0 ` {2 V; w% u* W! @' |2 I' ]
mov eax, 00 z" f7 I+ K/ i
cpuid
; g" C* u5 A( V$ p$ D mov DBase ,eax
8 M' S. X' D/ V+ ?, ~! g( j mov dword ptr cA ,ebx
$ p9 V: k( r9 X mov dword ptr cA+4 ,edx . W8 [8 |1 ]* C& F7 s
mov dword ptr cA+8 ,ecx 7 |( k9 h5 }2 Y0 I/ E7 U5 u2 V: u
}" ?; [; `1 N4 s: [6 [* i
cA[12] = '\0';
9 T+ |' E @% }/ Y8 y/ Z) n printf( "CPU factory: %s\n", cA );' c' ?5 a. o7 {- Y3 P0 O6 w0 T
system("pause");4 e% l7 C! [4 w3 P' @9 g! ^6 s
} |
|