4. Instrukcje logiczne i bitowe¶
4.1. Konwencje dokumentu¶
Notacja: Rd, Rn oznaczają rejestry ARM R0-R7 z wyjątkiem instrukcji specjalnych, gdzie można używać R0-R15. Rn<a-b> oznacza rejestr ARM, którego zawartość musi mieścić się w zakresie a <= contents <= b. W przypadku instrukcji z dwoma argumentami rejestrowymi dopuszczalne jest, aby były one identyczne. Na przykład poniższe wyzeruje R0 (w Pythonie R0 ^= R0) niezależnie od jego początkowej zawartości.
eor(r0, r0)
Te instrukcje wpływają na flagi warunku, z wyjątkiem przypadków, gdy stwierdzono inaczej.
4.2. Instrukcje logiczne¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xfffffffftzn. Rd = dopełnienie jedynkowe Rnbic(Rd, Rn)
Rd &= ~Rnwyczyść bity Rd używając maski w Rn
Należy zwrócić uwagę na użycie „and_” zamiast „and”, ponieważ „and” jest zarezerwowanym słowem kluczowym w Pythonie.
4.3. Instrukcje przesunięcia i rotacji¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnLogiczne przesunięcie w prawoasr(Rd, Rn<1-32>)
Rd >>= Rnarytmetyczne przesunięcie w praworor(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd jest rotowany w prawo o Rn bitów.
Rotacja o (na przykład) trzy bity działa w następujący sposób. Jeśli Rd początkowo zawiera bity b31 b30..b0, po rotacji będzie zawierać b2 b1 b0 b31 b30..b3
4.4. Instrukcje specjalne¶
Te instrukcje nie wpływają na kody warunku.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) zwraca liczbę binarnych bitów zerowych przed pierwszym binarnym bitem jedynkowym w Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) zwraca zawartość Rn z odwróconą kolejnością bitów. Jeśli Rn zawiera bity b31 b30..b0, Rd zostanie ustawione na b0 b1 b2..b31
Końcowe zera można policzyć, wykonując odwrócenie bitów przed wykonaniem clz.