|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!0 _5 f# h- O/ d5 `
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!4 ?- n7 V7 o* t* [0 k
另如果要全部代码,可以提供。
, r5 w2 w" }' Y1 r: ]$ Q
; p4 |. V2 J# z+ O, l: `- t9 @- ^#include <stdio.h>
* V' I: q- k: K1 C% ]#include "stdlib.h"
0 ~. P: Z$ D: m, M0 s7 \. Q1 n- f; P. d( X8 ?! S
main()
5 ~. R* p# c9 H. n{7 J+ ?- q0 o3 t) K
unsigned long DBase;
& N$ L- w% K% _, ]char cA[13];' s. e% i, z* j
_asm
& D5 L3 _1 ?: {3 N. _# c: Q7 P' |. f {
6 [3 Q" C# t/ z, z mov eax, 05 i Q \; n! l8 B8 u. `" _
cpuid$ B% x" J) l1 D+ a- a1 x- K
mov DBase ,eax0 }$ x; U4 U- B
mov dword ptr cA ,ebx; @) T( q e# R; A/ a) w
mov dword ptr cA+4 ,edx ! {2 U" I9 v: f& Y# W. {
mov dword ptr cA+8 ,ecx
2 f' @5 e- F/ H; v# q( k% D }- G3 t- C1 Z/ f
cA[12] = '\0';
1 k1 i8 h% s1 G2 O8 C: F) @ printf( "CPU factory: %s\n", cA );
6 Z x' f* J6 S0 F3 m3 [ system("pause");; v* t0 Z5 T" O0 n
} |
|