4. Instrucțiuni logice și pe biți#
4.1. Convenții ale documentului#
Notație: Rd, Rn denotă registrele ARM R0-R7, cu excepția instrucțiunilor speciale unde pot fi folosite R0-R15. Rn<a-b> denotă un registru ARM al cărui conținut trebuie să se afle în intervalul a <= contents <= b. În cazul instrucțiunilor cu două argumente registru, este permis ca acestea să fie identice. De exemplu, următoarea instrucțiune va aduce la zero R0 (în Python R0 ^= R0), indiferent de conținutul său inițial.
eor(r0, r0)
Aceste instrucțiuni afectează indicatorii de condiție, cu excepția cazurilor menționate.
4.2. Instrucțiuni logice#
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffadică Rd = complementul față de 1 al lui Rnbic(Rd, Rn)
Rd &= ~Rnșterge biții lui Rd folosind masca din Rn
Rețineți utilizarea lui „and_” în loc de „and”, deoarece „and” este un cuvânt cheie rezervat în Python.
4.3. Instrucțiuni de deplasare și rotație#
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnDeplasare logică la dreaptaasr(Rd, Rn<1-32>)
Rd >>= Rndeplasare aritmetică la dreaptaror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd este rotit la dreapta cu Rn biți.
O rotație cu (de exemplu) trei biți funcționează după cum urmează. Dacă Rd conține inițial biții b31 b30..b0, după rotație va conține b2 b1 b0 b31 b30..b3
4.4. Instrucțiuni speciale#
Codurile de condiție nu sunt afectate de aceste instrucțiuni.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) returnează numărul de biți binari zero dinaintea primului bit binar de unu din Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) returnează conținutul lui Rn cu biții inversați. Dacă Rn conține biții b31 b30..b0, Rd va fi setat la b0 b1 b2..b31
Biții zero de la coadă pot fi numărați efectuând o inversare a biților înainte de a executa clz.