Outils pour utilisateurs

Outils du site


back2root:tutoriaux:assembler-tips

Ceci est une ancienne révision du document !


Assembler tips

remplacer mul par du bit-shift

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]

back2root/tutoriaux/assembler-tips.1731407902.txt.gz · Dernière modification : 2024/11/12 11:38 de frater