|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
2 t' S# |0 {& I/ Q5 R! u或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
5 m% _6 P( { |9 ]. V3 N" f另如果要全部代码,可以提供。
* ?$ K, }9 w0 V$ ?
4 p; j+ t1 J! H1 O#include <stdio.h>
% Y% m. L5 o) U) E#include "stdlib.h"; a* ^3 L5 k" s, C& Q9 N) P7 F, v
( M% E8 ^6 r5 O/ Q
main()
/ R3 C6 \( y. f- u3 y{
% Q) k$ f: D) Dunsigned long DBase;% s) c v7 W3 }9 O
char cA[13];
1 |1 K% f4 ^5 P8 p g! q/ E_asm% e4 q% ?( h! S& A) L& K8 N J E# Q2 o
{/ C1 v/ B8 P) o" N% S: A
mov eax, 0
9 L1 p1 @- B2 E2 G0 `! d4 ] cpuid
' z+ j; X# ~& K7 H0 }) D mov DBase ,eax0 _9 |* L+ q2 n# o v
mov dword ptr cA ,ebx1 H& j- u [2 _. o: V
mov dword ptr cA+4 ,edx
1 n( A! q3 D7 A3 ?# o! @) A mov dword ptr cA+8 ,ecx ) }% p: n! l; F. L
}9 q9 @0 B; B7 M v7 N( N$ d
cA[12] = '\0';
6 B; E- R( [, |9 Y printf( "CPU factory: %s\n", cA );. {8 w$ r( p% b# R
system("pause");7 V% `$ { l- _0 z9 U! g
} |
|