|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!' {, |' s: q1 P
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!
$ O7 h/ W; i a2 f另如果要全部代码,可以提供。0 ^2 n# g0 c2 ^6 b0 \9 z
" l. x" E6 f' N0 ~#include <stdio.h># y) `* d4 k; z( v3 N4 L
#include "stdlib.h"
9 q/ o* [) A% W' x: Q( D, q6 A! @- c6 k- V% c4 s. L# Y8 L) z6 Z' s
main()
6 N- l8 ^( L4 V$ x D* X- O{
/ l4 s' z0 g2 u9 R* g3 Ounsigned long DBase;
* [% p* G7 ?# n3 gchar cA[13];* t- A+ p4 e+ | `) q. a
_asm2 ]! [" Q4 l/ b c
{- c F1 f* y7 v j* v
mov eax, 0
4 H4 t7 [9 B7 ^* y cpuid
5 g" @1 Z0 o1 s1 m5 n mov DBase ,eax5 _. [/ F, Q" ]7 h* U4 D9 N
mov dword ptr cA ,ebx
1 C3 U, O' {% z mov dword ptr cA+4 ,edx
/ [' M! E6 O5 @+ ?. E9 l2 d mov dword ptr cA+8 ,ecx
3 K- k/ W/ |& \; f( c" | }
" Y/ t4 R" Q, W. J6 h! A. b cA[12] = '\0'; , H& O/ u& h1 n/ e
printf( "CPU factory: %s\n", cA );4 C& x+ X- z/ U8 l1 S
system("pause");
" {% J* {% Y G( k' j0 x} |
|