|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!5 `& G A# o0 T& t# P
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!0 l' {+ D" z( } h9 [ k* ~
另如果要全部代码,可以提供。
, \# m& b2 k; g- J# m( G3 v3 t$ j, V# K
#include <stdio.h>% C& [/ e: l4 @4 l( M
#include "stdlib.h"
! }( e- L9 Y* i [" p. f4 ~* j* Y. m/ t$ F1 s! h
main()* v% p) ?# B, e+ @. i6 @9 r- f1 _2 m
{" |0 f0 b" D3 M5 k, W2 A/ U8 ^" _
unsigned long DBase;4 E6 Q+ S+ }. @1 B& ]* F h
char cA[13];
; F! ~# Z# T+ k2 B3 b, L3 T* v_asm4 ^ B8 k# U2 g2 O$ P9 s
{
* r& c2 `* a" O; }3 D5 S2 J/ b% X9 H mov eax, 0
1 y) N2 X2 `7 Y: N3 z! U cpuid: B0 T5 x! C% ]6 Z/ P. {3 \
mov DBase ,eax
1 L0 s& o% U% h mov dword ptr cA ,ebx
& [ p. \ }/ n mov dword ptr cA+4 ,edx
4 C. ~* d3 U: v) C9 J: g mov dword ptr cA+8 ,ecx $ A9 l% _. f, E9 K! N: g' \
}. [- D9 l' `. @" z. `# J7 t
cA[12] = '\0';
, d: e% q5 b& ]0 U- a$ |7 M printf( "CPU factory: %s\n", cA );
3 s) Z# O c7 g9 A* Q$ L system("pause");
! H. z+ s5 ~8 o} |
|