|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!8 n" r4 h6 n/ N- r; M4 K
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!& ]1 D* G) H& T8 Y( ]
另如果要全部代码,可以提供。4 Z- ~. B( [# ?+ K$ k
1 r% W, r+ A$ l
#include <stdio.h>* p1 q& a" W; u, B+ ?
#include "stdlib.h"
7 z2 _2 X. @0 ?) {6 o- M+ b; I7 ^& B" D# D' Z# n
main()
$ V0 V, ?5 f) H; Y{- p1 A0 M. B* C& l
unsigned long DBase;& F6 q9 G! g j+ J6 v
char cA[13];
" [ O# M! ]5 T, i+ Y/ ^, a_asm( C; v4 a# |4 ^* G9 ?9 U) A
{
$ H. D8 Q9 Y. W' r% z mov eax, 0! t1 z% x7 v. J; a4 G! ]# q
cpuid
& E9 n6 T! z0 o5 h2 N! t: F% Q mov DBase ,eax, F# {1 l* P3 ~6 X* i9 s; c, U- k$ u% \
mov dword ptr cA ,ebx, B }6 \& `' \, w7 o! v* v
mov dword ptr cA+4 ,edx 2 a4 n$ s5 i" c! N) r s; F
mov dword ptr cA+8 ,ecx
4 b9 T8 L/ Q( f3 B# M }
+ N K1 Q% K2 C1 c1 ~9 r$ {/ g cA[12] = '\0';
+ }; E. D" w6 N/ O! ? V" L printf( "CPU factory: %s\n", cA );
# G2 i, ]; k0 _4 C6 l8 V; [ system("pause");
1 ]% g, m% D3 b# N. b9 @5 d G6 M) X E} |
|