|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
, E1 o0 n5 w0 f: i或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
2 w3 M/ v9 H( g: L/ {另如果要全部代码,可以提供。" ?) C$ z3 t! s! J% O" U
8 ?, R( g( l% P7 S' g
#include <stdio.h>$ F) P3 X+ {, l. F) ]
#include "stdlib.h"( ~5 ]) h9 l+ H0 A- J
" t3 K4 R# `. B
main()$ w ]7 \5 i- [2 O, ]
{+ K. h# m2 M, k8 u5 O% C6 R' d
unsigned long DBase;8 x# d( j, q" I2 H1 c2 U4 s* ?% B; }
char cA[13];3 S* H0 N. _% a. y1 C
_asm- v7 d, g& @/ i8 u( \6 ?: s
{
( S) ^8 ~2 Y- }# w. B. T mov eax, 0- @1 r- b+ ]3 l! }) F' n5 L6 E; Z2 h
cpuid
: o5 W% j6 O/ a# b, Y3 _2 M mov DBase ,eax Z! Q6 D. N! m# H( C# ]7 H) ~
mov dword ptr cA ,ebx
; O9 ?- r9 X, ~5 G Q mov dword ptr cA+4 ,edx ) R8 h7 L" O" |8 d, f p; _
mov dword ptr cA+8 ,ecx
; ]( Y0 ?; `7 D8 d0 Q9 R; a* S }9 U& @9 o% ^; k
cA[12] = '\0'; 2 E9 G8 m+ m6 @' R D! Z, [
printf( "CPU factory: %s\n", cA );' {, `) {, N1 O
system("pause");
+ j) x8 \8 B- [6 b" M' |+ _3 @} |
|