|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
7 ]* z2 Q5 K* n+ t或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!/ i& W3 u! {' R# q" T( c
另如果要全部代码,可以提供。9 A5 a3 B- Y- J! |- H
! e) \6 `% N2 I#include <stdio.h>
+ t1 l( ?" @4 [#include "stdlib.h"7 ~* V4 W& p1 r* ]' N
' T" ]% x. M1 i: s/ y; |main()
" G" ]4 J' D/ T/ V, A- ?# }3 S9 V{
9 ~) w; w4 f. }+ g. J4 iunsigned long DBase; E, L& a- Q# k$ n6 M. S% t$ z
char cA[13];' K7 `% s, s' A0 ~, w7 X, o% n) O4 }# i
_asm& Y6 v7 y1 D/ C' L* J4 i# R
{8 V8 }( Y' n1 u: o% d% r
mov eax, 0
: x2 }2 m3 Z7 h2 G; {$ t cpuid0 _( p1 c+ F j& K/ E3 {: o. A
mov DBase ,eax
7 M4 u, S- M9 F mov dword ptr cA ,ebx8 I5 o) R' z7 {$ J+ @! u
mov dword ptr cA+4 ,edx
8 G. p( T+ i3 ~2 D. X; n, N& d mov dword ptr cA+8 ,ecx 8 e& ]! c) I5 n# \, B. L1 ?2 H% t
}# T, S' p; O- e9 i1 E$ E- w1 p
cA[12] = '\0'; # R9 R- |: ?0 r* I
printf( "CPU factory: %s\n", cA );( Y$ h4 m; p$ Z2 q+ r$ ]
system("pause");
& D; U+ M) M) S ?4 h0 b5 x} |
|