|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!+ v K* Z& k p" C! x. H9 v
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!! L" [6 B3 q! T0 |% o( j
另如果要全部代码,可以提供。
% d# o! J8 N, K( O2 e7 Z1 |" Y- p8 V, m
#include <stdio.h>
$ e' ]8 x- n) N9 D#include "stdlib.h"/ @" H( `- } g$ R! \
: S. Z1 S* J" H+ _( q4 M
main()
( F- R c3 O( h" |{. z% b* u4 [' C6 b r
unsigned long DBase;
3 r! j7 ~" v7 u5 w1 U7 ~5 i8 |char cA[13];) Z! t+ a8 Y: V X+ k% Y
_asm
3 i0 A' R' D" M {. r) l& k! d# j+ p. p
mov eax, 0
( b3 c; a! [# `5 J3 _ cpuid3 E8 c. X7 D8 l9 `( G
mov DBase ,eax
. T% k! F5 |' [& \! r mov dword ptr cA ,ebx
9 q( A) \: R( M) ?* N mov dword ptr cA+4 ,edx 3 ? }- w; U1 ~ y
mov dword ptr cA+8 ,ecx
/ v4 F% A" T4 j* @5 z$ F0 k c7 u }
* c: x' ~, S2 k D. x3 r: ] cA[12] = '\0';
5 @( d8 w2 g) Q4 C: g printf( "CPU factory: %s\n", cA );: b; t2 I! X% h$ P
system("pause");
8 H! x/ c b) F& r: A} |
|