|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!# ^5 A: [, S/ ?& L) [8 _
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!+ _2 u o9 L0 B0 U( n8 F
另如果要全部代码,可以提供。: j* h! X& N5 C0 g
q+ J, D) J, O7 s: _" B+ Z#include <stdio.h>
( a. |. y0 e: C% v3 Q#include "stdlib.h"
0 a9 X* |3 D3 I+ H& p! n
: k7 l% c5 j8 ^4 U1 ]main()/ e8 s9 `7 r1 |3 f0 d9 w; S- m' _
{" G3 Z; g; _; Q1 M3 ?
unsigned long DBase;
. {+ y# _# V" l& k* Nchar cA[13];
* M' H, [5 M, D9 T_asm
`5 B ^! ]: ]- \3 d l5 ^ {
0 D' q/ F5 H6 {1 G8 W1 F. w mov eax, 09 r. X1 `% r+ i+ `" V! ]2 l
cpuid
9 S" d7 q9 A5 D& ]+ k mov DBase ,eax
a1 K/ ~) y& y mov dword ptr cA ,ebx* t) @1 h+ j9 W2 U2 q
mov dword ptr cA+4 ,edx # W- i6 J4 J% h7 [+ A j$ N
mov dword ptr cA+8 ,ecx 9 v; z* e U2 e2 V4 ?$ b. A
}* X- B. j" D2 m( }, z- K
cA[12] = '\0';
( [9 ]& T: w8 X& S printf( "CPU factory: %s\n", cA );. b2 X0 _; H5 N/ m# @, W
system("pause");5 e# V: E Z& O, C$ \( R
} |
|