|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
+ I7 j) _# S4 G" V/ {或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!+ {: t0 n+ B- y- }2 j6 Z
另如果要全部代码,可以提供。
- v' A, c- J4 } j9 K d8 I# y% C" C; {- r! X& U' Z
#include <stdio.h>
. ?; d7 |1 r( M! s#include "stdlib.h"( _" ]6 w+ F7 b6 w$ F3 C
) u- ^! `" m) K) W# _: V3 N) x2 |! Y' m
main(). X. q9 M+ P0 s
{# m9 u% x& i" v* B3 j
unsigned long DBase;
$ X, [: G; {# o! G* g. tchar cA[13];; T5 |5 X: ? b# A9 I d$ G
_asm8 c; U& A3 G5 e W$ S5 c; G( L4 d F
{- O2 A& g8 z6 B$ Q v& M* k
mov eax, 05 ?* M" v$ K+ ]/ T- _
cpuid
3 o, C: ?( t5 v1 G2 L mov DBase ,eax
1 x- z' h. \& {9 Y U mov dword ptr cA ,ebx
$ Q8 }6 v: m- R6 k: x; b mov dword ptr cA+4 ,edx : x+ L1 f5 B0 i: D3 g- n. m9 U; M
mov dword ptr cA+8 ,ecx
0 m q$ }" G* @* Q1 h }8 l" s6 ^! |2 f6 S8 ?" N
cA[12] = '\0';
+ Z( M) g" w* d8 i& s: E( c1 h printf( "CPU factory: %s\n", cA );/ o4 s, s4 {9 S6 I: p$ r
system("pause");
. X9 o" @3 ?8 c} |
|