Syntaxe
|
EOR{S}{cond} Rd, Rn, Operand2
|
Paramètres
| Nom |
Description |
| S |
Ce paramètre optionnel permet d'indiquer le suffixe. Si ce paramètre est spécifié, les drapeaux de condition sont mise à jour dans le résultat de l'opérande |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| Rd |
Ce paramètre permet d'indiquer le registre de destination. |
| Rn |
Ce paramètre permet d'indiquer le registre contenant le premier opérande. |
| operand2 |
Ce paramètre permet d'indiquer le deuxième opérande flexible. |
Description
Cette instruction permet d'effectuer un «Ou exclusif binaire» avec 2 opérandes.
Remarques
- L'instruction EOR effectue un OU exclusif bit à bit : EOR (Exclusive OR) réalise une opération logique entre chaque bit de deux opérandes. Si les bits
sont différents (0 et 1 ou 1 et 0), le bit de résultat est 1 ; sinon, il est 0. Cette opération est couramment utilisée pour des manipulations binaires, notamment pour
le chiffrement, le masquage ou les tests de parité.
- Le paramètre S permet de mettre à jour les drapeaux de condition : Quand le suffixe S est présent (EORS), les drapeaux du registre CPSR (Négatif, Zéro,...)
sont mis à jour selon le résultat. Cela est utile pour enchaîner des instructions conditionnelles, en fonction du contenu logique résultant de l'opération.
- Peut être utilisée pour inverser certains bits sélectivement : Une astuce classique est d'utiliser EOR avec un masque binaire. En appliquant un XOR au
registre avec un masque, on inverse uniquement les bits correspondants à 1 dans le masque, ce qui est plus flexible qu'un NOT global.
- Operand2 peut être immédiat ou un registre avec décalage : Operand2 est un opérande flexible, ce qui permet une grande souplesse : on peut lui
passer une constante immédiate (exemple : #0xFF), un registre (R3), ou un registre avec décalage (R3, LSL #2). Cela permet d'adapter rapidement l'opération sans
instructions supplémentaires.
- Compatible avec les conditions d'exécution ARM : L'instruction peut être rendue conditionnelle grâce au champ {cond}. Par exemple, EOREQ n'exécutera
l'opération que si le drapeau Z (zéro) est actif, ce qui évite l'utilisation de branchements explicites tout en gardant le flux du programme lisible.
- Utilisée dans des algorithmes cryptographiques ou de hachage : Le XOR est une opération fréquente dans les algorithmes cryptographiques, car il est
réversible : un deuxième XOR avec la même valeur ramène à l'original. Cela fait de EOR une brique essentielle dans des fonctions comme AES ou SHA.
- Permet de comparer deux valeurs sans affecter la mémoire : En faisant un EOR R0, R1, R2, si R1 et R2 sont égaux, le résultat sera 0. Combiné avec le
suffixe S, cela permet de tester l'égalité sans modifier les registres source, en vérifiant si le drapeau Z est mis à 1.
- Une alternative élégante à certaines opérations conditionnelles : Dans certains cas, EOR permet d'implémenter des opérations conditionnelles sans
branchements. Par exemple, on peut "activer/désactiver" une valeur dans un registre via un XOR avec un masque, sans impacter les performances dues à des sauts ou
changements de flux.
Dernière mise à jour : Dimanche, le 12 novembre 2017