4. Logikai és bitenkénti utasítások

4.1. Dokumentumkonvenciók

Jelölés: az Rd, Rn az R0-R7 ARM regisztereket jelöli, kivéve a speciális utasítások esetében, ahol az R0-R15 használható. Az Rn<a-b> egy olyan ARM regisztert jelöl, amelynek tartalma az a <= contents <= b tartományba kell hogy essen. A két regiszter argumentummal rendelkező utasítások esetén megengedett, hogy azonosak legyenek. Például a következő nullázni fogja az R0-t (Pythonban R0 ^= R0), függetlenül annak kezdeti tartalmától.

  • eor(r0, r0)

Ezek az utasítások hatással vannak a feltételjelzőkre, kivéve ahol másként van jelezve.

4.2. Logikai utasítások

  • and_(Rd, Rn) Rd &= Rn

  • orr(Rd, Rn) Rd |= Rn

  • eor(Rd, Rn) Rd ^= Rn

  • mvn(Rd, Rn) Rd = Rn ^ 0xffffffff azaz Rd = az Rn 1-es komplemense

  • bic(Rd, Rn) Rd &= ~Rn az Rd bitjeinek törlése az Rn-ben lévő maszk használatával

Vegyük észre az „and_” használatát az „and” helyett, mivel az „and” foglalt kulcsszó a Pythonban.

4.3. Eltolási és forgatási utasítások

  • lsl(Rd, Rn<0-31>) Rd <<= Rn

  • lsr(Rd, Rn<1-32>) Rd = (Rd & 0xffffffff) >> Rn Logikai jobbra eltolás

  • asr(Rd, Rn<1-32>) Rd >>= Rn aritmetikai jobbra eltolás

  • ror(Rd, Rn<1-31>) Rd = rotate_right(Rd, Rn) Az Rd Rn bittel jobbra van forgatva.

Egy (például) három bites forgatás a következőképpen működik. Ha az Rd kezdetben a b31 b30..b0 biteket tartalmazza, akkor a forgatás után a b2 b1 b0 b31 b30..b3 biteket fogja tartalmazni

4.4. Speciális utasítások

A feltételkódokat ezek az utasítások nem érintik.

  • clz(Rd, Rn) Rd = count_leading_zeros(Rn)

A count_leading_zeros(Rn) az Rn-ben lévő első bináris egyes bit előtti bináris nulla bitek számát adja vissza.

  • rbit(Rd, Rn) Rd = bit_reverse(Rn)

A bit_reverse(Rn) az Rn bitenként megfordított tartalmát adja vissza. Ha az Rn a b31 b30..b0 biteket tartalmazza, az Rd a b0 b1 b2..b31 értékre lesz beállítva

A záró nullák megszámolhatók, ha a clz végrehajtása előtt bitenkénti megfordítást végzünk.