|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
1 x4 a$ `& S# }2 P$ T3 x或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
8 |6 H4 ^' Q0 e3 K: A8 ]另如果要全部代码,可以提供。
% V6 s9 y8 _, ?" u; p" I( q/ X0 J( C% @3 X
#include <stdio.h>7 {2 K" M0 o0 ~+ E; e1 ~
#include "stdlib.h"
' \: D8 F1 N* |: G- b6 R
' g4 x0 S9 \ I& u, v7 Dmain()) |3 F5 n9 g, g+ Y
{- k% m. O7 _2 k$ K/ E; [
unsigned long DBase;7 z- Q, P9 L4 X( ?
char cA[13];* n; O8 p! h$ V0 n/ R1 `
_asm
$ q/ m6 t8 S) j" y! I/ d! U3 m {# @1 U' F4 v; Y/ k6 |' }+ G, `
mov eax, 01 U( `* Y6 F! ^' J/ W0 P
cpuid
+ [3 b1 p/ j: w: E6 _* X5 y mov DBase ,eax
1 f; W6 i8 o" r3 S mov dword ptr cA ,ebx5 {- D( s1 {$ f, }6 \) E
mov dword ptr cA+4 ,edx
P6 N9 X- a. F" T9 [- A9 S mov dword ptr cA+8 ,ecx
* a" A4 r# ^: I9 [% ?( a* Z% m' i }
7 W3 ]+ d' a( D: d! M. a cA[12] = '\0'; % P# y5 @! _7 x& P
printf( "CPU factory: %s\n", cA );
/ Z" C/ ?4 [4 ` system("pause");
: U2 n4 b! w) `} |
|