4. Logické a bitové instrukce¶
4.1. Konvence dokumentu¶
Notace: Rd, Rn označují ARM registry R0-R7 s výjimkou speciálních instrukcí, kde lze použít R0-R15. Rn<a-b> označuje ARM registr, jehož obsah musí ležet v rozsahu a <= contents <= b. V případě instrukcí se dvěma registrovými argumenty je přípustné, aby byly totožné. Například následující vynuluje R0 (Python R0 ^= R0) bez ohledu na jeho počáteční obsah.
eor(r0, r0)
Tyto instrukce ovlivňují příznaky podmínek, není-li uvedeno jinak.
4.2. Logické instrukce¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xfffffffftj. Rd = jedničkový doplněk Rnbic(Rd, Rn)
Rd &= ~Rnvymazání bitů Rd pomocí masky v Rn
Všimněte si použití „and_“ místo „and“, protože „and“ je v Pythonu rezervované klíčové slovo.
4.3. Instrukce posunu a rotace¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnLogický posun vpravoasr(Rd, Rn<1-32>)
Rd >>= Rnaritmetický posun vpravoror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd je rotován vpravo o Rn bitů.
Rotace o (například) tři bity funguje následovně. Pokud Rd zpočátku obsahuje bity b31 b30..b0, po rotaci bude obsahovat b2 b1 b0 b31 b30..b3
4.4. Speciální instrukce¶
Tyto instrukce neovlivňují kódy podmínek.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) vrací počet binárních nulových bitů před prvním binárním jedničkovým bitem v Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) vrací bitově obrácený obsah Rn. Pokud Rn obsahuje bity b31 b30..b0, Rd bude nastaveno na b0 b1 b2..b31
Koncové nuly lze spočítat provedením bitového obrácení před vykonáním clz.