|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
# l* B% }! B2 a/ h. d或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!$ k, l4 t/ x3 T- c7 |. F1 B
另如果要全部代码,可以提供。* j1 M6 V0 ^( I$ d7 m
& ~$ Z0 s9 M- l1 a
#include <stdio.h>
. B( a6 ^' ] a: l( [, |#include "stdlib.h"
: ]. x& V1 A' }) E% T+ s4 k
5 L) z/ Q3 i8 f1 S7 Y/ }main()
( Z. N9 v/ D, R: R. C{+ Y: ~3 h9 S7 r& ^& ^, k
unsigned long DBase;
9 ]' I3 I' _# b# G3 E; _5 ?char cA[13];
# T- a& J7 _8 k_asm4 P: W9 I$ w7 [1 t h
{4 x% E3 @, Q7 b9 u4 I9 Q3 |) \0 Z
mov eax, 0# h! W7 i; I# [2 d
cpuid! B5 A0 \: z" R9 ~0 ?0 E' V/ Q
mov DBase ,eax
6 q2 j: ^) h- {; X mov dword ptr cA ,ebx
) w3 q; V! n7 W& e% T mov dword ptr cA+4 ,edx * w5 u0 `2 f3 t& |" M* X; I$ a# l
mov dword ptr cA+8 ,ecx
; o- D; `- E+ |" F0 P. U }
& K( C/ a( F. }* `6 ~! g0 S# i cA[12] = '\0'; - H- A/ I( R! {# y0 y* m
printf( "CPU factory: %s\n", cA );$ Z0 f. l% s3 z2 _ \ Y. Y
system("pause");" k7 K% q, x! C3 n; u* P
} |
|