C++ vers asm

Signaler
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006
-
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
salut j'ai un code que j'aimerais convertir un ensembleur pour un souci de rapidité. dont voici le code :


for (v=0; w<10; w++)
{
for (w=0; w<10; w++)
{
for (x=0; x<10; x++)
{
for (y=0; y<10; y++)
{
for (z=0; z<10; z++)
{
ProcX(v, w, x, y, z);
}
}
}
}

}

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
Un compilo C moderne fera ce genre de boucle à la perfection, il n'y a absolument rien à gagner ici à le refaire à la main.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

ben en fait mon code est en delphi.... je c pas si c aussi bon, mais un avantage de delphi, c'est qui'il permet d'insérer de l'assembleur directement dans le code. J'aimerais donc en profiter
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
Delphi, he he fallait préciser dans la question, j'aurais gagné du temps à passer mon chemin.

Dans tous les cas faudrait savoir ce qui va se passer dans tes boucles sinon impossible de savoir ce qui sera le mieux.
Commence deja par optimiser l'algo, c'est toujours la 1ere chose à faire:
for(v = 0; v < 10; v++)
n'est pas bon puisqu'il devrait tester 'v < 10' dès le début alors qu'on sait qu'on commence sur 0.
On remplacera par:
v = 0;
do {
// autres boucles (sur même principe) et codes ici
} while(++v < 10);
On saute déjà le 1er test inutile.

Ensuite encore mieux mais seulement si possible, à toi de le savoir. Commencer à la valeur haute et décrémenter le compteur vers 0, le code ASM généré est toujours plus court.
Exemple:
mov edi, 10
....
vLOOP:
;;; ton code ici
dec edi
jnz vLOOP
On gagne ainsi l'instruction "cmp edi, 10".

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
223
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
15 février 2006

ben en fait c un truc comme ca que j'aurais fait. Le le problème c qu'il n'y a pas assez de registre pour toute les boucles
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
sub esp, 4
voila pour un compteur 32 bits de plus si besoin.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++