|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
' m. P, {: X0 |+ C$ q2 M2 U或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
' s" z% @9 I/ v3 }4 T另如果要全部代码,可以提供。0 ] C% f. F+ ?* P- Q* }
" G- T: ^* Q- z6 L5 g& K i- [7 a
#include <stdio.h>. m9 a+ X7 u' e
#include "stdlib.h"
. ?2 C( q7 }. n) K" Q7 W8 Z, z8 O$ o s( b
main()
9 n* V1 `/ A9 z3 f b# {, S) ]/ n& l& Q{5 A3 M" o& M0 x7 G
unsigned long DBase;" G8 w F$ |0 u$ i7 o6 n0 M
char cA[13];
. u* g% f" {4 s# H* ~_asm
& r' `+ \9 N/ x9 U9 c2 g' `* C {4 ^( p7 I5 D: S# r7 h
mov eax, 0
3 e! `- h6 J g2 n) H& r: w cpuid8 E- k/ Y: x" `8 e6 v! y/ M a
mov DBase ,eax2 P/ J$ j) G! Q2 ]0 ~
mov dword ptr cA ,ebx- a. m) R# U; @7 ~7 D0 O
mov dword ptr cA+4 ,edx
3 M& r; d% F% Y3 |( z mov dword ptr cA+8 ,ecx
3 E& {- M) P2 C, L8 U8 ? }
% R- P' B# Y9 b, R0 \9 c cA[12] = '\0'; $ X- \( ^: [' E; U
printf( "CPU factory: %s\n", cA );
/ b/ \6 i% o7 b7 V" o! ^ system("pause");
2 X, J9 {8 D& u S$ {} |
|