|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!4 c1 q$ V: n5 S) U+ c" k
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
2 w0 }* e" @5 L- x0 j' y另如果要全部代码,可以提供。
0 e8 O" B; f; d- U J& e: @- R, Y' j7 f2 K7 N
#include <stdio.h>
0 s* c$ p R5 t% H#include "stdlib.h"
: F/ H5 l9 s: S6 O5 s
3 c T2 o0 j! c+ F/ G" I& Wmain()
1 n' y! k! v7 E{5 j' p1 ]. U" f& [
unsigned long DBase;, q* v( c3 L& O+ X: ?* h
char cA[13];- l w. x: s0 V; c( X3 V! d
_asm
; ~) W$ E5 s: g! I. ] E' {- h {3 m0 \/ A. Q) X$ U" `' C5 v r& _
mov eax, 0
- D& ]: ]6 [6 t+ n( C9 o cpuid+ @" ]5 _4 q, m* h8 i
mov DBase ,eax. \2 c+ d/ \/ S/ m9 J% r) H2 B, P
mov dword ptr cA ,ebx
# n, t& P5 ] x9 J5 E9 ? mov dword ptr cA+4 ,edx
' ~: ]% ^2 x1 M" Y# s mov dword ptr cA+8 ,ecx / Z* b$ s9 D$ o5 I1 j3 D4 j
}2 o& b- y* p5 W3 D8 [
cA[12] = '\0'; " O" \$ X) ^% x* O( i( G9 p
printf( "CPU factory: %s\n", cA );7 w& F+ F& T4 L( a$ Z z' C' c
system("pause");
7 A3 F& E/ v3 o* U: ?# k# J3 x} |
|