4. Loogiset ja bittikäsittelykäskyt¶
4.1. Dokumentin merkintätavat¶
Merkintä: Rd, Rn tarkoittavat ARM-rekistereitä R0-R7, paitsi erikoiskäskyjen tapauksessa, joissa voidaan käyttää rekistereitä R0-R15. Rn<a-b> tarkoittaa ARM-rekisteriä, jonka sisällön on oltava välillä a <= contents <= b. Kahden rekisteriargumentin käskyjen tapauksessa argumentit saavat olla samat. Esimerkiksi seuraava nollaa R0:n (Pythonissa R0 ^= R0) sen alkuperäisestä sisällöstä riippumatta.
eor(r0, r0)
Nämä käskyt vaikuttavat ehtolippuihin, ellei toisin mainita.
4.2. Loogiset käskyt¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffeli Rd = Rn:n 1:n komplementtibic(Rd, Rn)
Rd &= ~Rnbittien tyhjennys Rd:stä käyttäen Rn:n maskia
Huomaa, että käytetään ”and_” eikä ”and”, koska ”and” on Pythonissa varattu avainsana.
4.3. Siirto- ja kiertokäskyt¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnLooginen siirto oikealleasr(Rd, Rn<1-32>)
Rd >>= Rnaritmeettinen siirto oikealleror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd kierretään oikealle Rn bittiä.
Kierto (esimerkiksi) kolmella bitillä toimii seuraavasti. Jos Rd sisältää alun perin bitit b31 b30..b0, se sisältää kierron jälkeen b2 b1 b0 b31 b30..b3
4.4. Erikoiskäskyt¶
Nämä käskyt eivät vaikuta ehtokoodeihin.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) palauttaa binäärinollabittien lukumäärän ennen ensimmäistä binääriykkösbittiä Rn:ssä.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) palauttaa Rn:n bittikäännetyn sisällön. Jos Rn sisältää bitit b31 b30..b0, Rd asetetaan arvoon b0 b1 b2..b31
Loppunollat voidaan laskea suorittamalla bittikääntö ennen clz-käskyn suorittamista.