Mail Archives: djgpp/2000/04/15/14:01:50
Message-ID: | <38F8B55B.5BFDA8E0@home.com>
|
From: | Robin Johnson <robbat2 AT home DOT com>
|
Organization: | Orbit Computers
|
X-Mailer: | Mozilla 4.7 [en] (Win98; U)
|
X-Accept-Language: | en,af,es
|
MIME-Version: | 1.0
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | CPUID Opcode
|
X-Priority: | 1 (Highest)
|
Lines: | 67
|
Date: | Sat, 15 Apr 2000 18:30:42 GMT
|
NNTP-Posting-Host: | 24.113.36.103
|
X-Complaints-To: | abuse AT home DOT net
|
X-Trace: | news1.rdc1.bc.home.com 955823442 24.113.36.103 (Sat, 15 Apr 2000 11:30:42 PDT)
|
NNTP-Posting-Date: | Sat, 15 Apr 2000 11:30:42 PDT
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
Whenever I call the CPUID Opcode in the inline asm, my program seems to fail.
source:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
typedef long longreg;
typedef char chars[4];
void get_cpuid(const long int cpuidval, longreg &r_eax, longreg &r_ebx, longreg
&r_ecx, longreg &r_edx)
{ __asm__ __volatile__
( " pushl %%eax\n pushl %%ebx\n pushl %%ecx\n pushl %%edx\n
movl %4, %%eax \n
cpuid \n
movl %%eax, %0 \n
movl %%ebx, %1 \n
movl %%ecx, %2 \n
movl %%edx, %3 \n
popl %%edx\n popl %%ecx\n popl %%ebx\n popl %%eax"
: "=g" (r_eax), "=g" (r_ebx), "=g" (r_ecx), "=g" (r_edx)
: "g" (cpuidval)
: "ax", "bx", "cx", "dx", "memory"
);
}
void main()
{ long int a,b,c,d;
char nb[4],nc[4],nd[4];
printf("cpuid\n");
get_cpuid(0,a,b,c,d);
memcpy(nb,b,4);
memcpy(nc,c,4);
memcpy(nd,d,4);
printf("Max EAX: %i\nName: %s%s%s\n",a,nb,nc,nd);
}
stderr dump:
G:\prog\cpudetect>cpuid
cpuid
Exiting due to signal SIGSEGV
General Protection Fault at eip=000015c8
eax=00000001 ebx=756e6547 ecx=6c65746e edx=49656e69 esi=0008eec4 edi=0008eec0
ebp=0008ee98 esp=0008ee6c program=G:\PROG\CPUDET~1\CPUID.EXE
cs: sel=00a7 base=86008000 limit=0009ffff
ds: sel=00af base=86008000 limit=0009ffff
es: sel=00af base=86008000 limit=0009ffff
fs: sel=0087 base=00011220 limit=0000ffff
gs: sel=00bf base=00000000 limit=0010ffff
ss: sel=00af base=86008000 limit=0009ffff
App stack: [0008eef0..0000eef0] Exceptn stack: [0000edd8..0000ce98]
Call frame traceback EIPs:
0x000015c8
0x00001626
0x0000263a
--
Robin Hugh Johnson
"Robbat2"
QTOD: "I used to be an idealist, but I got mugged by reality."
E-Mail : robbat2 AT tesla DOT t-p-l DOT com
ICQ# : 30269588 or 41961639
Home Page : http://robbat2.t-p-l.com
Time Zone : Pacific Daylight (GMT - 8)
- Raw text -