« Les opérations bit à bit/Les subtilités du XOR » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 5 :
Initialiser une variable à 0 est une opération extrêmement courante. En conséquence, il vaut mieux la rendre la plus rapide possible. S'il n'y a pas de méthode particulière pour cela dans les langages de haut-niveau, les compilateurs ont cependant quelques possibilités d'optimisation. Il y a en effet plusieurs méthodes pour mettre un registre à 0 en assembleur, certaines n'étant compatibles qu'avec certaines processeurs. Certaines processeurs ont une instruction machine pour mettre à 0 un registre : c'est alors la solution idéale dans la (quasi-)totalité des cas. Sur les architectures n'ayant pas cette instruction, on peut utiliser une instruction MOV (ou équivalent). On peut l'utiliser en adressage immédiat : on place alors la constante 0 dans le registre. D'autres processeurs possèdent un registre spécial, qui conserve en permanence la valeur 0 et n'est pas accessible en écriture. Il suffit alors d'effectuer un MOV de ce registre vers le registre à initialiser. Mais il existe une dernière solution : faire un XOR entre le registre et lui-même. C'est notamment ce qui est fait sur les architectures x86.
 
Pour comprendre pourquoi cette solution fonctionne, il faut rappeler que l'on obtient 0 lorsque l'on XOR un bit avec lui-même : <math>a \oplus a = 0</math>. Si cela vaut pour un bit, cela s'applique aussi quand on effectue un XOR bit à bit sur un nombre : chacun de ses bits sera donc XORé avec lui-même, etce seraqui donc mis à zéro. Conséquence :fait qu'un nombre XOR lui-même donnera toujours zéro. Cette propriété est utilisé enpar les assembleurcompilateurs pour mettre à zéro un registre. D'ordinaire,Sur onles metarchitectures unx86, registrecette àsolution zéroest enlégèrement utilisantmeilleure uneque instructioncelle quiutilisant chargeun uneMOV constanteavec (iciadressage zéro)immédiat. dansCette undernière registre.solution Seuldemande problèmed'intégrer : cetteune constante peuten parfoisadressage êtreimmédiat, intégréequi directementprend dansfacilement la8 suiteà de16 bits. deUn l'instruction,nom side celle-ciregistre peutest utiliserbeaucoup leplus mode d'adressage immédiat. Danscourt, ce cas,qui unefait dizaineque de bits est utilisée pour stockerque la constante.solution Enavec comparaison, une instructionun XOR entredonne deuxdes registresinstructions n'auraplus paspetites. besoinSur d’intégrerd'autres de constante à coté de son opcodeprocesseurs, etqui prendrane moinssupportent depas place. Sur dl'autresadressage processeursimmédiat, la constante est lue depuis la mémoire. En comparaison, un XOR entre deux registres ne va rien charger en RAM et est donc plus rapide.
 
==Échange de deux variables==