|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
+ H* I+ v( S/ c1 g或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊! E+ G9 J" p! q! N
另如果要全部代码,可以提供。! O( e( H# J1 D
# a6 Z. z- L7 i' Y T
#include <stdio.h>
8 `% r$ o# O& k#include "stdlib.h"
8 y5 S. @8 \" T q8 o8 e5 K) E" y" `. \
main()# k/ b' n+ a( a* h% r3 @2 q
{
3 U! i: y4 q6 Tunsigned long DBase;+ H0 s5 f) c3 A% X% J$ i: Y
char cA[13];
! ]0 W S- ?6 @4 ~+ u_asm
6 ]. H# y1 [: c" `8 ~4 k {2 J0 p7 q' J$ E- B9 ^
mov eax, 0$ x$ b$ J6 [+ F9 @2 W: ?
cpuid
0 l9 w; O# v4 Q, B mov DBase ,eax. Q6 \8 q0 d9 h$ W6 I% S5 O
mov dword ptr cA ,ebx5 j; n* d! _1 ]3 P3 _9 C' G
mov dword ptr cA+4 ,edx
1 X1 j0 c! f4 x( ` mov dword ptr cA+8 ,ecx
4 L5 F0 |3 X. c0 F3 w- N }4 S9 R. K" f; _4 [
cA[12] = '\0'; . _5 }2 R9 v9 W/ M% j
printf( "CPU factory: %s\n", cA );& d2 A6 S' Y/ H) O( N
system("pause");* _( R6 O% J4 ?
} |
|