|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!9 Q& \$ t8 y* e( S n
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!4 k6 | ~2 a. f4 L
另如果要全部代码,可以提供。! H8 G0 @$ J) n+ `
/ l; Z. K8 H' I; O% Y# z$ b8 `9 v#include <stdio.h>9 m6 S Q8 x0 D i3 _
#include "stdlib.h"
1 U2 ]/ u. o& B z" ~/ Z9 \8 ~4 E4 N/ R2 n2 c1 I: u
main()9 L% c0 K% F: |
{
& b0 d5 }) _$ n% {3 qunsigned long DBase;
, V0 x' h6 }* U0 v: U$ o8 kchar cA[13];3 f, E9 [+ n4 O% m4 N
_asm
5 J! W8 h( i+ w. I5 K" X {
6 G- [# X8 T. V+ }+ K u! r8 t mov eax, 0
+ F1 W- {" y. |" G0 u cpuid
Z1 Y- }1 M! ]0 @1 w mov DBase ,eax
1 u* V k0 |' ^ mov dword ptr cA ,ebx% S3 ^+ k% L8 O
mov dword ptr cA+4 ,edx
& R2 ?" X) n- k% R$ h' G5 {4 m+ z mov dword ptr cA+8 ,ecx
* v2 @, u$ g2 m; ~ }
; `3 }9 m$ x7 U/ P) x cA[12] = '\0'; & O8 |2 ~" z; x( K1 l% t9 x. y
printf( "CPU factory: %s\n", cA );
) c( J* A! \. A: W system("pause");3 s# c4 p$ l4 [
} |
|