|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
6 |4 `4 O! I. f. f7 \或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!$ b" S7 c s; Z# p, {# @
另如果要全部代码,可以提供。
" D: j/ d0 K% A/ u& H6 R( s/ ^1 s1 \3 M5 G# ~
#include <stdio.h>9 }$ H5 y% R7 O$ v. S" K3 `
#include "stdlib.h"
$ D, r8 q( F& d+ d/ \! I8 R6 p( ~) t4 J8 M* N5 t
main()
2 ?# F* n+ E2 Z! t8 S{
& ^" B" t, z- o! Uunsigned long DBase;
' M: q6 k( ]2 T E H, ychar cA[13];* I G6 f( p. ?2 b2 L5 \) {
_asm
& a! k7 l9 @$ G3 Y2 R {
9 }" A6 d$ @/ N mov eax, 0: V+ m( @; E+ r% k* v7 o- z2 f
cpuid+ p( B, z/ m5 q+ N1 d
mov DBase ,eax# f; X/ F7 w0 Q& r) q! k# @
mov dword ptr cA ,ebx
O- _' L @0 G3 U# s! c mov dword ptr cA+4 ,edx 5 Q, T7 x* T( l" K0 R) Y; C+ e3 }! [* p% X
mov dword ptr cA+8 ,ecx
4 ~1 D; X: W; g# b }( W5 g2 h( O2 z# q( z- k
cA[12] = '\0'; - b$ \# K1 F6 \; t$ `0 h9 U
printf( "CPU factory: %s\n", cA );5 d. N$ u v) \, I; N
system("pause");6 `, J6 `: R# [* E7 q
} |
|