|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
$ {8 p4 q9 q6 h# Q7 P或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!& X+ w6 L `/ L/ e9 A5 l
另如果要全部代码,可以提供。
$ m% M* m% D9 {6 z7 \2 v
% Z7 [7 A$ }, b$ P#include <stdio.h>
$ d' K0 [( D M0 @" Q#include "stdlib.h"
6 D- b. t( {, m
1 c+ ^! p( u) E* a6 [main()2 w4 n7 }1 N8 A
{4 ~; @& Y5 T, y
unsigned long DBase;5 {2 }9 i$ M$ g/ {7 q1 T% f. J
char cA[13];- e( W) p& M8 G# }
_asm
4 W. f! ?: ?2 g2 I+ H( h {
! K" u* b2 G% U) g2 ^3 p- n mov eax, 0: Z6 ~/ P' c/ l8 s0 w' x3 x' L
cpuid9 u$ P' |" B9 O0 N$ F' _
mov DBase ,eax' r. m, o: Y+ n' m9 @
mov dword ptr cA ,ebx
" p6 V8 P2 n9 E mov dword ptr cA+4 ,edx ?( z1 g9 v; N- L1 G
mov dword ptr cA+8 ,ecx
- |% ?( L; W \$ w0 C }) Y s' f* Y) w! H7 x
cA[12] = '\0'; & {0 r! O8 c: Z' m! q D4 N
printf( "CPU factory: %s\n", cA );
% w& U& i' v5 u1 Q system("pause");0 P! E/ y( E1 [+ {$ |4 f4 F4 e
} |
|