|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!/ s, |' O1 G7 w+ l% D
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
& g& I! H9 | j另如果要全部代码,可以提供。
+ k* k' m1 s I' O6 p) [& F/ C6 E- p9 N6 y) N
#include <stdio.h>
: L" i' l0 ?6 A( |' x#include "stdlib.h" B- T' R: ^5 [' H- _/ a
. V# w+ {% r( V7 @$ I8 d! Q, h7 Gmain()1 e2 a) u- U4 z( t( r. f$ c9 N- Z
{
8 x0 B4 @3 V1 y5 f0 g) H0 I$ Uunsigned long DBase;
K: a9 s) d9 j$ x4 gchar cA[13];, K$ m- ~& ?+ _0 g& p. [5 |6 C4 M, P
_asm% c/ P. X6 Y$ d
{9 w& i: F9 j! l3 T. v! A% m$ o0 E
mov eax, 0
/ t# ^$ H' z/ M8 }# R cpuid
; M6 K* W& {7 p2 U0 \ mov DBase ,eax, V# U" {6 s s7 n. p5 z' S b. X k
mov dword ptr cA ,ebx* a, w T5 V& m+ r; h; k
mov dword ptr cA+4 ,edx
# x9 T Z. o) F mov dword ptr cA+8 ,ecx
. G; p% K/ ~; R' n# |$ L1 q }
) P* V+ F# J$ a, B; R4 ` cA[12] = '\0'; + w/ M6 b. G, H$ L, ?
printf( "CPU factory: %s\n", cA );
" v+ m" K: ]* }5 q& Q; Q% K system("pause");
: c) r1 Z1 } E} |
|