|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!6 p" N2 Q5 w8 S1 g& D
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
* ]& S. B7 e9 U% Y4 T0 l另如果要全部代码,可以提供。, l( R- _, D# ?# h: ~
* `9 C3 @+ z( X3 z#include <stdio.h>( \) m0 Q2 P5 h% {
#include "stdlib.h"
; m6 T: I8 ^ \* P: B3 Z- G3 ?6 f7 m5 C
main()' P" z2 B& c# I) f. }
{5 ]& Y& _5 r# u; X% n
unsigned long DBase;4 K X- f1 j0 b1 P/ v, S
char cA[13];- l) i% |* ~# V7 [3 e. a, M
_asm
, \3 V+ `' m3 f1 ]% M: m8 f {3 ^' ?3 k+ m4 D2 k# v3 y
mov eax, 0. x9 I* h: @2 l: ]) |1 R
cpuid
) g8 r( B# ^8 `3 i F( ^, y6 n- i mov DBase ,eax$ R4 v. c) S% z0 U3 d Y- N
mov dword ptr cA ,ebx
% }& q. s' J7 v9 c mov dword ptr cA+4 ,edx
( |- x" W' s; C4 Z mov dword ptr cA+8 ,ecx
3 d" u5 `9 q, C% w0 R! ?/ b }
. }% M2 M; E. o) `* k0 {9 b- J cA[12] = '\0';
* z- X* D8 q( D/ \# U7 n& d printf( "CPU factory: %s\n", cA ); C7 J3 [( R8 m
system("pause");
! d: Z( Z, h. ]8 e} |
|