|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
; \/ a* n' {) b或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
* N% V0 t5 {9 b. n- r- G2 ]另如果要全部代码,可以提供。
' `. u4 e" Z5 z4 x( ~8 g: j5 |+ b# {$ l% {# D P% ~
#include <stdio.h> T( B, t0 Z# {' n+ m6 w
#include "stdlib.h"' R6 A% y: D# L$ [1 s8 i. e
3 @) n' H$ X/ L' E: s- imain()4 m4 q7 O' D8 I
{( N- ], R( B3 }* R7 u0 E
unsigned long DBase;
0 C; F# w0 m$ N0 V! fchar cA[13];
+ d( W/ W, b- {& C9 Q_asm8 |- K) {$ d' e4 f( S8 j# f! r1 F3 t
{
7 \! {3 p9 M0 a e mov eax, 0& x6 ?9 ~( |( ?8 Y5 |$ ]0 U
cpuid
8 V6 J( P; c9 _ G2 m; P. b mov DBase ,eax
/ G W: I- ~! n& R4 ~. Z3 q mov dword ptr cA ,ebx; B: g4 V3 f/ k; _- F( e) i
mov dword ptr cA+4 ,edx
8 F( U" J1 t/ ]5 [/ d mov dword ptr cA+8 ,ecx 4 b* e& ?7 w5 W. l3 c
}
; D, {5 i" x1 E( r cA[12] = '\0'; ' L ?1 f" k ]/ v/ u! f7 `6 H
printf( "CPU factory: %s\n", cA );8 d3 o: W# |; l( `
system("pause");$ p$ B6 X4 I+ s5 [/ O: T: a
} |
|