|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
+ r) l! B; \5 t* f. ]* J" Y或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!/ u# V/ k/ ?2 ~& _/ f7 J
另如果要全部代码,可以提供。' j5 M+ S, ]5 ^0 |
! }, I) T1 P6 }/ l% g4 S. L) D& k#include <stdio.h>+ m$ g2 r+ w- t" r
#include "stdlib.h"
9 _0 I5 K& }" V% t1 G+ s( _
# v, V6 R0 c4 u% w( G; U5 Gmain()
7 h: {( p3 H8 A! H+ a' ^{3 B4 K( v, o/ \# R- M5 r+ H
unsigned long DBase;6 \5 P, J8 Y8 l9 W% I
char cA[13];! C" V) y9 E( Q! B* z7 A) _
_asm& k2 }3 w: ]' u1 i# R
{
2 K1 m: f& k3 S2 E mov eax, 0
" c; o2 H: P) H, _0 |1 _ cpuid
' \ s8 B# `( d! O mov DBase ,eax
2 _/ K; ` n' A* V. ~4 Z mov dword ptr cA ,ebx
+ E3 n+ b1 e O2 z7 {% I& r# v mov dword ptr cA+4 ,edx : o% ?! I9 S0 j* t
mov dword ptr cA+8 ,ecx
& |' m; [( Q: s } y6 z3 P( z, C0 X% w
cA[12] = '\0'; 9 |! r7 [; I) i7 B. @
printf( "CPU factory: %s\n", cA ); @5 c- ?; j+ l7 A/ L
system("pause");
# V/ ~& x- c+ U} |
|