4. Istruzioni logiche e bit a bit¶
4.1. Convenzioni del documento¶
Notazione: Rd, Rn indicano i registri ARM R0-R7, tranne nel caso delle istruzioni speciali, dove possono essere usati R0-R15. Rn<a-b> indica un registro ARM il cui contenuto deve trovarsi nell’intervallo a <= contents <= b. Nel caso di istruzioni con due argomenti di registro, è ammesso che essi siano identici. Ad esempio, il seguente azzererà R0 (in Python R0 ^= R0) indipendentemente dal suo contenuto iniziale.
eor(r0, r0)
Queste istruzioni influenzano i flag di condizione, tranne dove indicato.
4.2. Istruzioni logiche¶
and_(Rd, Rn)
Rd &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffovvero Rd = complemento a 1 di Rnbic(Rd, Rn)
Rd &= ~Rnazzera i bit di Rd usando la maschera in Rn
Si noti l’uso di «and_» anziché «and», perché «and» è una parola chiave riservata in Python.
4.3. Istruzioni di scorrimento e rotazione¶
lsl(Rd, Rn<0-31>)
Rd <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnScorrimento logico a destraasr(Rd, Rn<1-32>)
Rd >>= Rnscorrimento aritmetico a destraror(Rd, Rn<1-31>)
Rd = rotate_right(Rd, Rn)Rd viene ruotato a destra di Rn bit.
Una rotazione di (ad esempio) tre bit funziona come segue. Se Rd contiene inizialmente i bit b31 b30..b0, dopo la rotazione conterrà b2 b1 b0 b31 b30..b3
4.4. Istruzioni speciali¶
I codici di condizione non sono influenzati da queste istruzioni.
clz(Rd, Rn)
Rd = count_leading_zeros(Rn)
count_leading_zeros(Rn) restituisce il numero di bit binari a zero prima del primo bit binario a uno in Rn.
rbit(Rd, Rn)
Rd = bit_reverse(Rn)
bit_reverse(Rn) restituisce il contenuto di Rn con i bit invertiti. Se Rn contiene i bit b31 b30..b0, Rd verrà impostato a b0 b1 b2..b31
Gli zeri finali possono essere contati eseguendo un’inversione dei bit prima di eseguire clz.