andi
lyszt.net tratta andi e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
andi esegue un AND bit a bit con una costante. and prende due registri, ma andi prende un registro e un immediato, un valore fisso codificato nell'istruzione. La i sta per immediato. La regola dell'AND è invariata: un bit del risultato è 1 solo quando entrambi i bit di ingresso sono 1, quindi la costante agisce come una maschera che conserva alcuni bit e azzera gli altri. Il mascheramento e le operazioni bit a bit sono trattati nella pagina and.
La forma di andi è mostrata di seguito. Esegue l'AND del valore in rs1 con la costante imm e scrive il risultato in rd.
andi rd, rs1, imm
Usala quando sai in anticipo quali bit mantenere. La riga seguente mantiene gli 8 bit più bassi di t0 e azzera i 24 superiori, estraendo un byte da un valore più grande. Il prefisso 0x indica una costante esadecimale.
andi t1, t0, 0xff
La costante deve stare in 12 bit, quindi non può esprimere una maschera ampia. Per una maschera più grande, caricala in un registro con li e usa and.
Il manuale RISC-V dice che l'immediato a 12 bit viene esteso con segno a 32 bit prima dell'operazione, quindi una costante negativa ha tutti i bit superiori impostati. andi, ori e xori eseguono l'operazione bit a bit sul registro rs1 e su quel valore esteso e mettono il risultato in rd.
Seguono due usi comuni. La prima riga sotto mantiene solo il bit più basso, che è 1 per i numeri dispari e 0 per i numeri pari. La seconda riga dà il resto dopo la divisione per 8, perché un resto senza segno per una potenza di due sono i bit più bassi.
andi t1, t0, 1 andi t1, t0, 7
Esempio
andi t1, t0, 0xff # keep only the low byte
