|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
3 ]/ A) h3 F2 X! ^或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!) q0 x' z, N3 f! m
另如果要全部代码,可以提供。) q( l. @' l2 Z
6 Q; F3 P( ^: R#include <stdio.h>
2 J4 I6 b' d# W# [ Q$ ~% E#include "stdlib.h"
/ T+ J+ p# i6 D [7 V S* o* b2 n+ |' d( t
main()
0 M& @/ }' E- p' w" o{ g9 q8 d c! ?' R# ]; m: S, S
unsigned long DBase;
3 y5 p0 ^1 v8 }1 h |4 l$ Gchar cA[13];
7 M+ c |% M0 C; R8 ]8 L! V- e4 i+ j_asm
. Q+ E0 S( ]" t- I {0 |& \- @$ L: t* H0 z9 y
mov eax, 01 i$ o4 I0 R0 @7 e, _; F
cpuid
' U6 I6 Z& x6 b, }' o: M mov DBase ,eax
* p5 Y: [9 ]; Q. D* v7 z6 ~0 _ mov dword ptr cA ,ebx
5 l7 ~- m2 l2 @9 G) b [ mov dword ptr cA+4 ,edx ; e* U% V2 j- U5 c3 X
mov dword ptr cA+8 ,ecx + ?: |, g7 L8 E# H, z' | |: O
}
; i- h& u& g8 H" W2 j cA[12] = '\0'; 6 ?8 V3 O: X+ E! J' [
printf( "CPU factory: %s\n", cA );5 O L1 B$ i( ~/ a8 C
system("pause");6 v" Z* I. e( Z" ?8 e
} |
|