|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
?" F$ l7 N. Y0 l9 y或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
8 }- V- @9 R3 H另如果要全部代码,可以提供。
0 n3 |3 j4 @; T# U0 C# k. M# s8 u/ j- O; w9 [2 i4 E0 ~2 h1 W3 u
#include <stdio.h> O( v9 |! v F) h
#include "stdlib.h"+ r0 U' {0 w& F3 N0 P: o
2 e$ b6 a2 T" s$ G9 t$ h
main()
# u X9 b1 \, g" U{& ] ~2 C8 p1 N! u9 [3 _* p) }
unsigned long DBase;1 F( |. h) _- i2 d
char cA[13];
' s) H! \. P$ E1 H, h_asm
( J# O( Y0 G4 M* g( y+ n {/ ?* n$ R9 I/ Q. h! `5 n- `% O
mov eax, 0' v% G [$ g5 q, e3 S$ I9 c8 H8 |
cpuid
1 x( [2 w) V! [, k mov DBase ,eax
7 h, K) o2 s$ c6 W7 a mov dword ptr cA ,ebx
; a& ^; N7 M" {1 R" c' d mov dword ptr cA+4 ,edx
A5 u6 ~3 b B: x% L mov dword ptr cA+8 ,ecx
0 o+ g6 a1 U. r9 a# Y- h }1 K; I( ~# T$ C2 k6 C. b
cA[12] = '\0'; ! |' u, M8 m6 S5 q4 f2 L
printf( "CPU factory: %s\n", cA );1 W6 D6 o) h- H6 ~
system("pause");
) _. |7 ^6 J8 C} |
|