|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!9 q* Z' s5 ~# z& |6 k% Q
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
) x! H1 P; N3 f; _另如果要全部代码,可以提供。0 m' U3 o) f5 l& b
" L" i' J- L( `- v#include <stdio.h>* D" B; R" j2 I( `0 Z
#include "stdlib.h"
9 W& O0 e" X& m6 w& f4 j1 ?& G, H5 M
main()
) q" f5 J0 M" u n{. m1 e% y# g! L7 E c9 _
unsigned long DBase;$ v+ p; t. A0 z1 H
char cA[13];# Q v1 R9 C [* g( R2 c5 V/ B
_asm% p1 J3 B, _( D) R
{
" I; F; |5 v8 H, C mov eax, 0
' M8 `& {3 f; ^) e1 d) x2 ^ cpuid( X& [5 v4 d# @6 h6 q; h
mov DBase ,eax! j2 G1 x$ t, S
mov dword ptr cA ,ebx
5 j! A2 S, h& Q7 D ?! ]% I mov dword ptr cA+4 ,edx 0 b* r# D# S. D, Q# x
mov dword ptr cA+8 ,ecx
8 Z0 x/ c; h! h1 [. w% _- L7 V- v, U- @ }6 N- g0 a: a% o3 q& X6 {# @
cA[12] = '\0'; , Q8 R' j; X! p$ o8 [# K
printf( "CPU factory: %s\n", cA );
* Y( y e3 |5 A! M$ q$ | system("pause");: H4 p) l! V# c9 j: A# d) `
} |
|