C++ vers asm

cricri_b34 Messages postés 223 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 15 février 2006 - 13 févr. 2006 à 01:15
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 15 févr. 2006 à 00:45
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 févr. 2006 à 10:26
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++
0
cricri_b34 Messages postés 223 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 15 février 2006
13 févr. 2006 à 14:13
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 févr. 2006 à 14:47
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++
0
cricri_b34 Messages postés 223 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 15 février 2006
15 févr. 2006 à 00:22
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 févr. 2006 à 00:45
sub esp, 4
voila pour un compteur 32 bits de plus si besoin.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Rejoignez-nous