Ceci est une ancienne révision du document !
Quand on fait des démos, il arrive souvent que l'on doive multiplier les y par la taille d'une ligne et ensuite d'y ajouter la valeur de x.
int offset = (320*y)+x;
ce qui se traduit en assembleur par quelque chose du genre:
; Cycles : 386 | 486 mov ax,[y] ; 4 | 1 mov bx,320 ; 2 | 1 mul bx ; 22 | 26 add ax,[x] ; 6 | 1 ; Total 34 | 29
sauf que… cela prends du temps:
Si, sur un 386, un mov prends relativement peu de temps (~ 4 cycles d'horloge) et un add (~2 cycles), un mul est BEAUCOUP plus couteux (jusqu'à 22 cycles sur un 386sx).
on le voit, le 486 est plus optimisé pour les fonctions mov et add, mais le mul est encore plus lourd; heureusement que les 486 sont généralement plus rapide que les 386.
alors qu'un simple shr/shl, ne demande “que” 9 cycles.
le code précédent peut donc s'écrire:
; cycles ; code ; 386 | 486 mov ax,[y] mov bx,ax shr ax,6 shr bx,8 add ax,bx add ax,[x]
Tutoriaux disponible