begin process at 2012 05 25 10:10:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Système d'exploitation

 > 

Linux

 > 

script C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

script C++

vendredi 15 avril 2011 à 22:16:19 | script C++

elhajjajireda

Bonjour
si le vous plait est ce qu'il y a quelqu'un qui peut m'aider à comprendre ce code et surtout celui de la fonction MCheckCpu() et MCpuid()



#include "MUtils.h"

//~ static int WithMmxSseUse= 0;

using namespace std;

namespace local_vis_eric
{
void Memms() { // ==> should be done after MMX and before FPU calculations <==
#ifdef ARCH_X86
emms();
#endif
}


int MExists(const char* FileName) {
FILE* File;
if ((File=fopen(FileName,"r"))== NULL) return 0;
fclose(File);
return 1;
}
const char* MExistingFileName(const char* PrefixSuffix, int Number) {
static char FileName[1024];
if (PrefixSuffix== NULL || !strlen(PrefixSuffix))
return NULL;
int i, iMax= strlen(PrefixSuffix);
for (i=0; i< iMax; i++)
if (PrefixSuffix[i]=='*')
break;
if (i== iMax)
return NULL;
sprintf(FileName,"%s", PrefixSuffix);
sprintf(FileName+i,"%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"0%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"00%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"000%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
sprintf(FileName+i,"0000%d%s", int(Number), PrefixSuffix+i+1);
if (MExists(FileName)) return FileName;
return NULL;
}


#include <sys/time.h>

double MTime() {
//struct timeval tv;
//gettimeofday(&tv, (struct timezone *)NULL);
return 0.0;
}

double MTime2()
{
//struct tms buffer;
//(void) times(&buffer);
//double NbClkTck=sysconf(_SC_CLK_TCK);
return 0.0;
}





int MCpuid() { // This function is from the GNU mpeg2dec source.
// Copyright (C) 1999-2001 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
#ifdef ARCH_X86
uint32_t eax, ebx, ecx, edx;
int AMD;
uint32_t caps;

#define cpuid(op,eax,ebx,ecx,edx) \
asm ("cpuid" \
: "=a" (eax), \
"=b" (ebx), \
"=c" (ecx), \
"=d" (edx) \
: "a" (op) \
: "cc")

asm ("pushfl\n\t"
"popl %0\n\t"
"movl %0,%1\n\t"
"xorl $0x200000,%0\n\t"
"pushl %0\n\t"
"popfl\n\t"
"pushfl\n\t"
"popl %0"
: "=a" (eax),
"=b" (ebx)
:
: "cc");

if (eax == ebx) /* no cpuid */
return 0;
cpuid (0x0000int MCpuid() { // This function is from the GNU mpeg2dec source.
// Copyright (C) 1999-2001 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
#ifdef ARCH_X86
uint32_t eax, ebx, ecx, edx;
int AMD;
uint32_t caps;

#define cpuid(op,eax,ebx,ecx,edx) \
asm ("cpuid" \
: "=a" (eax), \
"=b" (ebx), \
"=c" (ecx), \
"=d" (edx) \
: "a" (op) \
: "cc")

asm ("pushfl\n\t"
"popl %0\n\t"
"movl %0,%1\n\t"
"xorl $0x200000,%0\n\t"
"pushl %0\n\t"
"popfl\n\t"
"pushfl\n\t"
"popl %0"
: "=a" (eax),
"=b" (ebx)
:
: "cc");

if (eax == ebx) /* no cpuid */
return 0;
cpuid (0x00000000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof*/00000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
0000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));

return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
0000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
0000, eax, ebx, ecx, edx);
if (!eax) /* vendor string only */
return 0;
AMD = (ebx == 0x68747541) && (ecx == 0x444d4163) && (edx == 0x69746e65);
cpuid (0x00000001, eax, ebx, ecx, edx);
if (! (edx & 0x00800000)) /* no MMX */
return 0;
caps = M_MM_ACCEL_X86_MMX;
if (edx & 0x02000000) /* SSE - identical to AMD MMX extensions */
caps = M_MM_ACCEL_X86_MMX | M_MM_ACCEL_X86_MMXEXT;
cpuid (0x80000000, eax, ebx, ecx, edx);
if (eax < 0x80000001) /* no extended capabilities */
return caps;
cpuid (0x80000001, eax, ebx, ecx, edx);
if (edx & 0x80000000)
caps |= M_MM_ACCEL_X86_3DNOW;
if (AMD && (edx & 0x00400000)) /* AMD MMX extensions */
caps |= M_MM_ACCEL_X86_MMXEXT;
return caps;
#endif
return 0;
};

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof(float)== 4);
assert(sizeof(double)== 8);
assert(sizeof(long long)== 8);
assert((MCpuid()&(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT))==
(M_MM_ACCEL_X86_MMX|M_MM_ACCEL_X86_MMXEXT));
//assert(sseUse==2);
//~ WithMmxSseUse= 1;
}
//~ int MWithMmxSseUse() {return WithMmxSseUse; };
int MWithMmxSseUse() {return sseUse; };
//~ void MSetWithMmxSseUse(int w) { std::cout << " Settings SSE " << w << std::endl;WithMmxSseUse=w;}

}
samedi 16 avril 2011 à 16:26:59 | Re : script C++

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

CptPingu a vu juste sur cppfrance.

Sous cette forme, c'est trop imbuvable pour être détaillé:
des #endif sans #if préàlables, des utilisation eax,ebx, ... qui ne sont pas déclarées:

void MCheckCpu() {
assert(sizeof(char)== 1);
assert(sizeof(short)== 2);
assert(sizeof(int)== 4);
assert(sizeof*/00000, eax, ebx, ecx, edx); // mais où va-t-il cherhcher tout ça...

des recopies sauvages:

cpuid (0x0000int MCpuid() { // This function is from the GNU mpeg2dec source.
// Copyright (C) 1999-2001 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
#ifdef ARCH_X86
uint32_t eax, ebx, ecx, edx;
int AMD;
uint32_t caps;

Eh non, il n'y a pas marqué La Poste...
@++


Cette discussion est classée dans : mm, edx, assert, x86, accel


Répondre à ce message

Sujets en rapport avec ce message

help syntaxe [ par Evonay ] pouvez vous me dire ou est le probleme de syntaxe dans:movzx edx,byte ptr [offset _AddTable+edx+ebx]avecvar _AddTable: array[0..256*2-1] of Byte; # Export Table - Kernel32.dll - GetProcessAddress # [ par joanna ] Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la # Export Table --- Kernell32.dll --- GetProcAddress # [ par joanna ] Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la syntaxe Masm [ par Stormy ] J'ai un code asm brut à établir selon les usages de Masm version 8. Cette ligne n'est pas reconnue par le compilateur:mov edx, dword ptr fs:[edx]Quell Parcours tableau de HWND [ par AlexMAN ] Bonjour, Voila mon pb : Je declare un tableau de HWND comme suit :hwndCmd HWND 10 dup (?)Ensuite, je veux créer 10 boutons et stocker leur handle ds c [MASM] Chronomètre [ par ZogStriP ] Je souhaiterais faire un chronomètre à la miliseconde prés ( au format : mm:ss:nn avec mm minutes, ss secondes, nn milisecondes !)Je souhaiterais LecteurEstDvd asm inline [ par AlexMAN ] Bonjour, Voila j'ai un ptit pb au nivo, je pense, de l'appel de la fonction DeviceIoControl, le code : //Fonction Cint __stdcall LecteurEstDvd(char *p Cherche doc instructions asm x86... [ par akboy7015 ] Bonjour a tous...J'ai beau eu cherché sur ce site dans le forum, je ne trouve aucun lien vers une bonne doc assembleur x86 faisant la liste de toutes Stack [ par AlexMAN ] Bonsoir, Je me pose une kestion :Si au debut d'une fonction, je fais : lea edx, [esp - 32]mov esp, edxcall CreateRectRgnOn est d'accord, la pile est r Programme en assembleur un peu tordu.... [ par linuxux ] Bonjour, Voilà un petit programme pour un exo qui me semble un peu tordu. Les questions sont tout d'abord que fait ce programme (pour moi il tou


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales