Bonjour,
Je viens de me metre tres recement à l'assembleur, bien que je ne doute pas des capacité de celui-ci, voici mon probleme.
J'ai testé mon code dans Visual Studio 2005, voici mes 2 fonctions :
Et lorsque je teste la rapidité d'execution, mon code ASM est plus lent que mon code C ! (Mode Release avec optimisation standard )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void ASMbuff8to32(BYTE* in, BYTE* out, int imgSize) { __asm { mov ecx, imgSize //Stock la taille de l'image mov eax, in //pointe sur l'image d'entree mov ebx, out //pointe sur l'image de sortie label: mov dl, byte ptr [eax]//recupere le BYTE de l'image d'entree mov byte ptr [ebx], dl //copie le 3 fois dans l'image de sortie mov byte ptr [ebx+1], dl mov byte ptr [ebx+2], dl add ebx,3 //avance de 3 sur l'image de sortie inc eax //avence d'un sur l'image d'entree //decremente le compteur loop label //boucle tant que ecx > 0 } } void buff8to32(BYTE* in, BYTE* out, int imgSize) { while ( imgSize >= 0 ) { *out = *in; out++; *out = *in; out++; *out = *in; out++; in++; imgSize--; } }
En regardant en mode debugage de VS, je remarque de le code ASM généré par ma function C est bien plus long et à l'air d'etre bien mois optimisé!
Je sais que l'integration de code Asm dans un langage C, n'est pas la façon la plus rapide d'execution, mais c'est quand meme bien étrange ?
Si vous avez le moindre soupçon, de savoir d'ou cela peu provenir, merci de bien vouloir eclairer ma lumiere dans ce sombre couloir... je suis completement désassemblé
Partager