|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!1 e7 Z# f! e, N: a+ @1 Q0 ^
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
6 C0 x( R/ c+ _6 Q( t: S另如果要全部代码,可以提供。5 a5 |/ k' v: m/ N
/ q" P1 U' }' S+ a$ f7 m#include <stdio.h>
; \* k# I7 F# q; x' G3 C# A#include "stdlib.h"1 t4 n( [+ l! W. {7 f3 L7 [" p
- T, w) x u" }main()7 A, l7 o! ^' E4 D- {, ~
{" N, \" p; Z7 {3 j! C8 g
unsigned long DBase;
: O, g, g: I2 W, ^, v- wchar cA[13];3 \5 C. F- o& r
_asm
% v6 o# X. L" T( @* m% `9 _ {
, n* D8 Z5 x9 D8 |9 B4 E# l mov eax, 0, o, ?4 I2 J: f$ F
cpuid
0 t9 r; s& l7 m: c mov DBase ,eax
6 Y- |6 m' H+ v mov dword ptr cA ,ebx. D6 s0 ]/ E' N. g' c" m/ s
mov dword ptr cA+4 ,edx # m' |& w% j$ S% i2 d# x
mov dword ptr cA+8 ,ecx $ p; i- c6 h& L5 g
}
" Q, c2 F# F/ Q$ O" ] cA[12] = '\0';
+ ?: r1 X8 R) P$ _7 @3 ^* T printf( "CPU factory: %s\n", cA );
7 c6 z6 f% ]% n system("pause");) V4 U; W# d7 c( ^" b# R F
} |
|