|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!3 \0 \$ \3 o) P7 Y6 \
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!- b& m. m* `+ k* J0 R9 C
另如果要全部代码,可以提供。
% ^- B/ d5 u8 i% P2 F& ~% j" h: b2 o: d' t3 p
#include <stdio.h>
+ v" W! E% w2 n/ K' A#include "stdlib.h"* [$ ]2 ]8 o" b! S! W2 P o+ N# _
4 u$ ~" R7 ^0 D) }' t Omain()) V+ V/ c6 v5 ~) H9 A' H
{
8 w6 c6 B) C5 z. Funsigned long DBase;5 T% F8 A, g. [2 g9 Q3 j
char cA[13];
1 N4 _4 e, E D_asm! p: } p+ r% j' e% [! A
{7 H" _6 r$ |1 P5 H/ l7 |6 ~
mov eax, 0
/ W' a5 Y& ?; H cpuid
3 _1 O) A2 Z4 V mov DBase ,eax
: M0 H( T/ _1 S4 r3 D1 j; a* N mov dword ptr cA ,ebx, |9 L3 D5 j. ]5 s& v; t2 Z1 ~/ K
mov dword ptr cA+4 ,edx 3 m7 T }- p8 @
mov dword ptr cA+8 ,ecx
% A) g: z# w- a" t1 m }
( c( N2 m; Z, E* @ cA[12] = '\0';
4 l! k9 I7 e. K$ F printf( "CPU factory: %s\n", cA );
9 y( g6 c; A; s) `( S( S1 v# m system("pause");0 J- K+ F2 r( J' M; g1 R2 Z+ l. h
} |
|