|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!8 h: S: H1 i8 ?7 m! J/ w
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
' x7 t. }/ T8 C4 w另如果要全部代码,可以提供。$ v0 X; ~. b- m! M$ A3 U
( Q$ C+ c9 ]/ a) _
#include <stdio.h>
: }0 d, u+ C. \#include "stdlib.h"
" i! L; g8 h' f) t" m
4 _0 d j# }& P. u0 }4 B# E4 e' }main()
9 D' K- ^" q2 r% j0 F{
" R# b y5 U! L6 d! U; F, `- Vunsigned long DBase;
0 t% g1 m: ~) o: F9 |char cA[13];" T0 x7 C6 T6 V2 s Q! R& K& f2 s
_asm
4 W$ @; b6 C4 b7 q L {
2 I5 U+ d# @0 J- V; w z- O: { mov eax, 0
6 I9 \( B0 Z0 q6 V cpuid" S K9 [! G$ l( E$ c/ u) _% M
mov DBase ,eax& W7 S+ n) {' P# e& E5 q
mov dword ptr cA ,ebx
! }; R5 {5 W9 H' N& s mov dword ptr cA+4 ,edx
& w; T# T* U% y/ o, J mov dword ptr cA+8 ,ecx
7 b8 h, H4 Q$ y }/ z! [' m& }0 W7 S8 W0 ~
cA[12] = '\0'; % E* x) m6 ^& @) `3 Q
printf( "CPU factory: %s\n", cA );' L) c8 V& e& F; Q. c! C/ @6 [
system("pause");
: }3 h/ {$ i2 t" V- x9 S! E} |
|