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 &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffazaz Rd = az Rn 1-es komplemensebic(Rd, Rn)
Rd &= ~Rnaz 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 <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnLogikai jobbra eltolásasr(Rd, Rn<1-32>)
Rd >>= Rnaritmetikai jobbra eltolásror(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.