4. Logische und bitweise Anweisungen¶
4.1. Dokumentkonventionen¶
Notation: Rd, Rn bezeichnen die ARM-Register R0-R7, außer im Fall der speziellen Anweisungen, bei denen R0-R15 verwendet werden dürfen. Rn<a-b> bezeichnet ein ARM-Register, dessen Inhalt im Bereich a <= contents <= b liegen muss. Im Fall von Anweisungen mit zwei Register-Argumenten ist es zulässig, dass diese identisch sind. Zum Beispiel setzt das Folgende R0 auf null (Python R0 ^= R0), unabhängig von seinem ursprünglichen Inhalt.
eor(r0, r0)
Diese Anweisungen beeinflussen die Bedingungs-Flags, sofern nicht anders angegeben.
4.2. Logische Anweisungen¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffd.h. Rd = Einerkomplement von Rnbic(Rd, Rn)
Rd &= ~RnBit-Löschen von Rd mithilfe der Maske in Rn
Beachten Sie die Verwendung von „and_“ anstelle von „and“, weil „and“ ein reserviertes Schlüsselwort in Python ist.
4.3. Schiebe- und Rotationsanweisungen¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnLogische Rechtsverschiebungasr(Rd, Rn<1-32>)
Rd >>= Rnarithmetische Rechtsverschiebungror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd wird um Rn Bits nach rechts rotiert.
Eine Rotation um (zum Beispiel) drei Bits funktioniert folgendermaßen. Wenn Rd anfänglich die Bits b31 b30..b0 enthält, enthält es nach der Rotation b2 b1 b0 b31 b30..b3
4.4. Spezielle Anweisungen¶
Bedingungscodes werden von diesen Anweisungen nicht beeinflusst.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) gibt die Anzahl der binären Null-Bits vor dem ersten binären Eins-Bit in Rn zurück.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) gibt den bit-umgekehrten Inhalt von Rn zurück. Wenn Rn die Bits b31 b30..b0 enthält, wird Rd auf b0 b1 b2..b31 gesetzt
Nachfolgende Nullen können gezählt werden, indem vor der Ausführung von clz eine Bit-Umkehrung durchgeführt wird.