|
|
下面是我用C写的读CPU信息的一小段代码,中间加入了32位读CPU信息的CPUID汇编指令,在windows下是没问题的,可是我是要编译出来在DOS下运行的,运行不了,我汇编可以说是白纸,我想请教下:有什么办法可以将32位指令改成16位的吗??或者是定义什么伪指令来执行?听说是实模式与保护模式的一种切换,可是我真的一点都不懂。。。虚心请教!
" H) Y8 h8 _- X3 }. M" d0 l或者我另知道可以通过SMBIOS来读取CPU信息,现在SMBIOS都2。7了吧,但是我在读SMBIOS中CPU部分的信息时,验证CORE的CPU不知道怎么识别不了,请指教啊!- T5 [( M4 a& }5 M
另如果要全部代码,可以提供。
; l* s' [( F2 ~# `( V7 E6 T6 R: Y8 c5 ]& s7 `8 c( Y: P
#include <stdio.h>: N0 I' ?2 _ }* D7 Y" L! o9 h
#include "stdlib.h"6 z" D" h+ ^ r1 j- s, H
/ u& o( J/ s% G4 t1 L6 [4 U
main(); ], g5 n f& [
{
+ |) J- `% n4 g; V2 F/ z ^4 uunsigned long DBase;# Q4 Q' @* q- [" b2 a$ h
char cA[13];
A1 x j) W- X3 e7 |# \# K_asm
$ ?" ^) O. \9 k {
& x( i. C5 y6 o" ~3 k/ r# p+ B mov eax, 0
2 ?. F9 ?2 F& V# K+ }8 [- { cpuid' V# q1 p/ e* [
mov DBase ,eax
8 r8 h2 e' ]( U6 p* J mov dword ptr cA ,ebx0 G9 n* X1 q: N4 w$ T1 x9 ?8 k
mov dword ptr cA+4 ,edx 5 [- c2 q# h0 x; B4 f% m
mov dword ptr cA+8 ,ecx ( r2 B% N" y( y, m4 j, x1 ~2 b4 n
}
5 h- E1 K' S' W& M cA[12] = '\0';
# E' N% S" [! z* S2 x printf( "CPU factory: %s\n", cA );/ |# l+ X+ `( i6 O: J) v$ s
system("pause");
" J+ p7 {4 r* r3 }. n( V. e2 Z} |
|