Optimisation

sajid_morad Messages postés 31 Date d'inscription vendredi 27 février 2004 Statut Membre Dernière intervention 26 mars 2009 - 11 nov. 2004 à 16:58
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 12 nov. 2004 à 14:29
salut tout le monde , j ai une parti du code en c++, que j ai voulu optimiser , le l ai reécri en asm , mai ça donne pas grand chose, si quelqu un pourrai m aider ça sera trop cool
voila la boucle en c++:
for ( i= 0;i< iProduit; i++,buffy++) // buffy un tableau de short
{ if (*buffy > maxv)
p_iImagePixelOGL[i] = 0;/* p_iImagePixelOGL un tableau de BYTE*/
else if (*buffy < minv)
p_iImagePixelOGL[i] = 255;
else
p_iImagePixelOGL[i] = (BYTE)(255-(((*buffy-minv) * produit) >> 10));

}
//===================================
la traduction en asm donne :
__asm
{
// if (*buffy > maxv)
toto: mov edx,dword ptr [ebp-18h]
movsx eax,word ptr [edx]
cmp eax,dword ptr [ebp-0Ch]
jle toto1
mov ecx,dword ptr [ebp-4]
mov edx,dword ptr [ecx+28h]
mov eax,dword ptr [i]
mov byte ptr [edx+eax],0
jmp toto2
toto1: mov ecx,dword ptr [ebp-18h]
movsx edx,word ptr [ecx]
cmp edx,dword ptr [ebp-8]
jge toto3

mov eax,dword ptr [ebp-4]
mov ecx,dword ptr [eax+28h]
mov edx,dword ptr [i]
mov byte ptr [ecx+edx],0FFh
jmp toto2
toto3: mov eax,dword ptr [ebp-18h]
movsx ecx,word ptr [eax]
sub ecx,dword ptr [ebp-8];
imul ecx,dword ptr [ebp-10h]; sar ecx,10; mov edx,255
sub edx,ecx;
mov eax,dword ptr [ebp-4]
mov ecx,dword ptr [eax+28h]
mov eax,dword ptr [i]
mov byte ptr [ecx+eax],dl

toto2:
add dword ptr [ebp-18h],2
inc dword ptr [i]
mov eax,dword ptr [ebp-4]
mov ecx,dword ptr [i]
cmp ecx,dword ptr [eax+134h]
jl toto
}

sachant que je développe en visual c++;
Merci

1 réponse

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
12 nov. 2004 à 14:29
salut,

1 - en asm inline, il me semble que l'on peut acceder au nom des variable directement.

mov edx,buffy
movsx eax,word ptr [edx]
cmp eax,maxv
jle toto1

2 - *buffy est utilisée régulierement. sauvegarde la dans un registre.

push esi
mov edx,buffy
movsx eax,word ptr [edx]
cmp eax,maxv
mov esi,eax
jle toto1
...
pop esi

@++
0
Rejoignez-nous