|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
[Gas]Problemi
Codice:
#include <iostream>
#include <string>
std::string name;
char eax, ebx, ecx, edx, res;
void CpuInfo()
{
// BASIC INFO
__asm ("xor %0, %0 ; cpuid" : "=r"(res) : "a" (eax), "b" (ebx), "c" (ecx), "d" (edx));
name = eax;
name += ebx;
name += ecx;
name += edx;
std::cout << name.c_str() << "\n";
}
int main()
{
CpuInfo();
std::cin.get();
return 0;
}
// :~
Eppure la sintassi del comando asm inline mi sembra giusta(il cod asm lo sarebbe normalmente in fasm/nasm) Tnks
__________________
Gnu/Linux User
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Scritto in fretta; mi perdonerai la scarsa fantasia nei nomi.
Codice:
#include <iostream>
#include <string>
unsigned eax, ebx, ecx, edx;
std::string name;
std::string RegToStr(unsigned _r)
{
union {
unsigned r;
char s[5];
} __r;
__r.r = _r;
__r.s[4] = '\0';
return std::string(__r.s);
}
void CpuInfo()
{
__asm ("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : );
name =RegToStr(ebx);
name += RegToStr(edx);
name += RegToStr(ecx);
std::cout << name.c_str() << "\n";
}
int main()
{
CpuInfo();
std::cin.get();
return 0;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 07-07-2005 alle 17:47. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Ovviamente la riga asm deve essere questa... Codice:
__asm ("cpuid" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a"(0) );
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Infatti, Luc@s, ilsensine ha ragione: io per il cpuid utilizzo questa istruzione:
Codice:
uint32_t regs[4]; __asm__ __volatile__ ( "movl %%ebx, %%esi \n" "cpuid \n" "xchgl %%esi, %%ebx \n" : "=a" (regs[0]), "=S" (regs[1]), "=c" (regs[2]), "=d" (regs[3]) : "0" (0) );
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Perché vuoi preservare ebx?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Non c'è alcun motivo, puoi utilizzarlo come tutti gli altri
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:02.



















