|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!/ s1 ?6 c, r- u6 x6 @ V+ L* S
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!. }7 c, f$ Y# l6 y# b0 V5 P
另如果要全部代码,可以提供。' g1 k( A# W# n! P* Y" d
2 g1 \/ x' E1 Z/ d# ]: p#include <stdio.h>9 W0 ?4 M2 [, g' d
#include "stdlib.h"' w, i: v. I* K! H% T/ Z
- m R y9 ?( Y0 x: T
main()2 W" Q9 L4 z8 v" b: P4 V
{
; G: }$ }3 _7 M& s2 M- qunsigned long DBase;3 N, X8 B+ K2 j/ @: Z
char cA[13];( h) e. H3 U7 }4 w7 A0 H/ h' n
_asm6 ], L, z7 A+ {' r
{% ^8 Q& e6 B9 |5 a
mov eax, 0
4 _' g. m% H2 g# ]2 s cpuid' X5 f8 Z! ]" R) Y% X
mov DBase ,eax
6 H7 \2 B I: m8 L mov dword ptr cA ,ebx+ ?( @' g& L E8 d* _
mov dword ptr cA+4 ,edx
4 @; a* }, I" |" k+ P! X; n mov dword ptr cA+8 ,ecx
0 d' U4 y! i* m. g }# H: u- Z" j1 ~. _* _! |" G7 I: A
cA[12] = '\0'; 9 m0 [- h- r1 Y$ K! r, Y# c7 S
printf( "CPU factory: %s\n", cA );
- m7 [ n- K) q, G# R: j/ H4 k system("pause"); e% n9 \# y5 W4 g* g
} |
|