xori
lyszt.net tratta xori e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
xori esegue un XOR bit a bit con una costante. Insieme a andi e ori, completa le istruzioni logiche con immediato. La i significa immediato: un valore fisso codificato nell'istruzione, quindi un secondo registro è superfluo. XOR restituisce 1 in una posizione di bit quando i due bit differiscono (vedi la pagina xor). Data una maschera costante, un 1 nella maschera inverte il bit corrispondente e uno 0 lascia quel bit invariato.
La sintassi di xori è mostrata di seguito. Esegue lo XOR del valore in rs1 con la costante imm e scrive il risultato in rd.
xori rd, rs1, imm
andi azzera i bit selezionati, ori li imposta e xori li inverte. Invertire due volte restituisce il valore originale.
xori fornisce anche l'istruzione not. Invertire tutti i bit di un valore significa eseguire lo XOR con una maschera di tutti 1, e not è una scorciatoia per la riga seguente, perché -1 in binario è composto da tutti 1. RISC-V non ha un'istruzione dedicata che inverta ogni bit.
xori rd, rs, -1
Il manuale RISC-V afferma che l'immediato a 12 bit viene esteso con il segno a 32 bit prima dell'operazione, quindi la costante -1 diventa una maschera di tutti 1. Elenca xori con la costante -1 come l'inversione logica bit a bit di un registro, ovvero la pseudo-istruzione not.
Un piccolo uso comune inverte un valore sì o no mantenuto come 0 o 1. La riga seguente lo commuta nell'altro stato ogni volta che viene eseguita.
xori t0, t0, 1
La costante è limitata a 12 bit. Per pattern più ampi, caricare la maschera in un registro e usare xor.
Esempio
li t0, 0 xori t1, t0, -1 # t1 = -1 (every bit flipped)
