Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
back2root:tutoriaux:assembler-tips [2024/11/12 11:11] – créée frater | back2root:tutoriaux:assembler-tips [2024/11/12 14:40] (Version actuelle) – frater | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Assembler tips ====== | ====== Assembler tips ====== | ||
+ | |||
+ | ===== Remplacer MUL par du bit-shift (SHDL) ===== | ||
+ | |||
+ | 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. | ||
+ | |||
+ | <code c> | ||
+ | int offset = (320*y)+x; | ||
+ | </ | ||
+ | |||
+ | ce qui se traduit en assembleur par quelque chose du genre: | ||
+ | |||
+ | <code asm> | ||
+ | ; Cycles : 386 | 486 | ||
+ | mov ax, | ||
+ | mov bx, | ||
+ | mul bx ; 22 | 26 | ||
+ | add ax, | ||
+ | ; Total = 34 | 29 | ||
+ | </ | ||
+ | |||
+ | sauf que... cela prends du temps: | ||
+ | |||
+ | Si, sur un 386, un [[back2root: | ||
+ | |||
+ | on le voit, le 486 est plus optimisé pour les fonctions [[back2root: | ||
+ | |||
+ | alors qu'un 386 dispose d' | ||
+ | |||
+ | on peut donc ré-écrire le code ' | ||
+ | |||
+ | <code c> | ||
+ | int offset = (y<< | ||
+ | </ | ||
+ | |||
+ | le code précédent peut donc s' | ||
+ | |||
+ | <code asm> | ||
+ | ; Cycles : 386 | 486 | ||
+ | mov ax, | ||
+ | mov bx,ax ; 2 | 1 | ||
+ | xor dx,dx ; 2 | 1 | ||
+ | shld | ||
+ | shld | ||
+ | add ax,bx ; 3 | 1 | ||
+ | add ax, | ||
+ | ; Total = 21 | 10 | ||
+ | </ | ||
+ | |||
+ | on " | ||
+ | |||
+ | si vous désirez, avoir une résolution différentes, | ||
+ | |||
+ | {{tablelayout? | ||
+ | ^ mul ^ bitshift | ||
+ | | 80 | (y<< | ||
+ | | 320 | (y<< | ||
+ | | 640 | (y<< | ||
<nspages back2root/ | <nspages back2root/ |