|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!/ \. S9 W" z, V, ]$ B
或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!' w1 x$ ]( ]- l) u( }
另如果要全部代码,可以提供。
5 [6 ~+ s6 p7 Y2 i, x4 Q6 {4 Y
' y% c$ c$ |( u( A3 W#include <stdio.h>
" {. R/ G* [' y. F* E3 W#include "stdlib.h"
6 c! X3 C f/ B9 F5 a/ }# F1 S. a4 p! R0 l3 r) y$ v5 {
main()
& `/ J8 C4 }5 A7 [/ X{0 D- y9 k6 e# C: Q+ ?
unsigned long DBase;* [# o( k0 F' o- b
char cA[13];
$ y- g2 @8 ]- ]_asm, f3 i. K$ _9 S' b+ k
{
1 n4 r7 ]$ r5 _ mov eax, 0
' v$ \" U- A# s2 e6 A1 V cpuid: T7 w# s4 P& b9 L+ n2 j# x8 o* G
mov DBase ,eax3 O8 C3 H3 V6 B) }" W
mov dword ptr cA ,ebx
: n6 `4 b1 S7 y3 I9 X mov dword ptr cA+4 ,edx
+ ]: P+ _* a% T+ ~) a, f6 Y mov dword ptr cA+8 ,ecx
# p& z1 o7 d( D; R8 x* E+ { }
2 D7 S$ C. R' G cA[12] = '\0';
7 P d2 M' s: n printf( "CPU factory: %s\n", cA );
0 ?0 H4 W8 i5 O3 O5 }+ s system("pause");- ]+ ~( ?7 h6 ~$ A# H- m
} |
|