|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
, ~: W5 o3 i+ [, z6 ~' c或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
" K' p' B8 Z. @6 P! C& d另如果要全部代码,可以提供。* [4 f/ \$ h: H( m) a
; H8 Z8 ]7 `" S$ s% C. Y, t5 K#include <stdio.h>
6 l/ l) S3 I: {7 R, c3 B. t#include "stdlib.h"- Y4 i2 Q; n/ ^
* t( y4 _3 n9 Hmain()
3 |! W0 u; H& Q+ h O g{' [ @' ~! R5 Y# B7 p) Y; i
unsigned long DBase;
$ ]* H7 s. ~1 _2 M" n% lchar cA[13];
" q/ a2 A% P2 a- M+ ~# }! _$ z_asm
$ j: o/ [6 _8 X& ]3 j- { {
1 ^* y4 m1 X3 p* Q mov eax, 0
7 B+ ~6 y( \2 F4 P% `3 C# Z( H% F cpuid
% | R4 Q$ P W# p" u9 h, S; e mov DBase ,eax
2 | \8 V9 |$ S, U1 }, q+ w4 |6 n mov dword ptr cA ,ebx
' [* E9 ~1 J C! ` mov dword ptr cA+4 ,edx y8 V9 H4 {- ?
mov dword ptr cA+8 ,ecx ; r/ y5 W' {+ Y8 u4 z/ S
}
4 b0 ]6 l; V) l" \7 K8 A cA[12] = '\0'; / Q g2 `6 [, p. ~" w
printf( "CPU factory: %s\n", cA );
6 z* i! A: i( x6 p system("pause");
" f* _% w$ j- l+ o' B} |
|