ROR |
Rotation vers la droite |
|---|---|
| ARM | |
Syntaxe
|
ROR{S}{cond} Rd, Rm, Rs ROR{S}{cond} Rd, Rm, #sh |
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. |
| Rm | Ce paramètre permet d'indiquer le registre contenant le premier opérande. Cet opérande est décalé vers la droite. |
| Rs | Ce paramètre permet d'indiquer une valeur de décalage à appliquer à valeur du paramètre Rm. Seul l'octet de poids le plus faible est utilisé. |
| #sh | Ce paramètre permet d'indiquer une constante de décalage. Les valeurs doit être situé entre 1 et 31. |
Description
Cette instruction permet d'effectuer une rotation de bits vers la droite.
Remarques
- ROR effectue une rotation circulaire vers la droite : Contrairement à un décalage logique (LSR), l'instruction ROR fait "tourner" les bits vers la droite : les bits qui sortent à droite sont réinjectés à gauche. C'est très utile pour les algorithmes qui nécessitent une circularité des bits, comme en cryptographie.
- Deux syntaxes possibles : constante ou registre de décalage : ROR accepte soit une constante (#sh) pour définir le nombre de bits à faire tourner, soit une valeur entreposée dans un registre (Rs). Cela donne beaucoup de flexibilité, notamment lorsqu'on veut que la rotation soit dynamique, définie à l'exécution.
- Les valeurs de rotation vont de 1 à 31 : La valeur constante #sh doit obligatoirement être comprise entre 1 et 31. Une valeur de 0 n'a pas de sens ici, et pourrait produire un comportement non défini ou simplement être ignorée selon le processeur.
- Seul le dernier octet de Rs est pris en compte : Lorsque la rotation est définie par un registre (Rs), seuls les 8 bits de poids faible (le byte le moins significatif) sont utilisés. Cela veut dire que même si Rs contient une valeur élevée, elle sera réduite modulo 256 pour déterminer la rotation.
- S permet de mettre à jour les drapeaux du registre d'état : Avec le suffixe S, ROR met à jour les drapeaux conditionnels (N, Z, C) du registre d'état. Cela peut être utile si on veut utiliser le résultat dans une instruction conditionnelle ARM immédiatement après (BEQ, BNE,...).
- ROR n'affecte pas la mémoire, uniquement les registres : Comme la plupart des instructions logiques, ROR agit uniquement sur les registres. Elle ne lit ni n'écrit en mémoire, ce qui en fait une instruction rapide et sûre pour des opérations internes au processeur.
- L'argument Rd peut être le même que Rm : Il est possible de réutiliser un des registres comme source et destination, par exemple : ROR r1, r1, #3. Cela effectue une rotation en place, sans avoir besoin d'un registre temporaire. C'est souvent pratique pour optimiser le code.
- Très utile dans le chiffrement et le hachage : Les rotations sont couramment utilisées dans les algorithmes cryptographiques (comme SHA, MD5, ou RC5). L'instruction ROR permet d'implémenter efficacement ces transformations bit à bit directement dans le code assembleur ARM.
Dernière mise à jour : Dimanche, le 12 novembre 2017