4. Instructions logiques et bit à bit¶
4.1. Conventions du document¶
Notation : Rd, Rn désignent les registres ARM R0-R7 sauf dans le cas des instructions spéciales où R0-R15 peuvent être utilisés. Rn<a-b> désigne un registre ARM dont le contenu doit se situer dans la plage a <= contents <= b. Dans le cas des instructions à deux arguments de registre, il est permis qu’ils soient identiques. Par exemple, ce qui suit mettra R0 à zéro (en Python R0 ^= R0) quel que soit son contenu initial.
eor(r0, r0)
Ces instructions affectent les drapeaux de condition sauf indication contraire.
4.2. Instructions logiques¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffc.-à-d. Rd = complément à 1 de Rnbic(Rd, Rn)
Rd &= ~Rnefface les bits de Rd à l’aide du masque dans Rn
Notez l’utilisation de « and_ » au lieu de « and », car « and » est un mot-clé réservé en Python.
4.3. Instructions de décalage et de rotation¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnDécalage logique vers la droiteasr(Rd, Rn<1-32>)
Rd >>= Rndécalage arithmétique vers la droiteror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd subit une rotation vers la droite de Rn bits.
Une rotation de (par exemple) trois bits fonctionne comme suit. Si Rd contient initialement les bits b31 b30..b0, après rotation il contiendra b2 b1 b0 b31 b30..b3
4.4. Instructions spéciales¶
Les codes de condition ne sont pas affectés par ces instructions.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) renvoie le nombre de bits binaires à zéro précédant le premier bit binaire à un dans Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) renvoie le contenu de Rn avec les bits inversés. Si Rn contient les bits b31 b30..b0, Rd sera positionné à b0 b1 b2..b31
Les zéros de fin peuvent être comptés en effectuant une inversion de bits avant d’exécuter clz.