notpseudo

not

pseudo
Assembly RISC-V Riferimento

lyszt.net tratta not e altre istruzioni RISC-V in modo più dettagliato.

Descrizione

not inverte tutti i bit di un registro. Uno 0 diventa 1, e un 1 diventa 0. La forma seguente legge il registro sorgente rs, inverte tutti i 32 bit e scrive il risultato nel registro di destinazione rd. Questa operazione è il complemento bit a bit.

not rd, rs

not è una pseudoistruzione: un nome leggibile che l'assembler riscrive in una vera istruzione. Diventa l'istruzione seguente, che è un XOR con una maschera di tutti 1.

xori rd, rs, -1

XOR inverte un bit ovunque la maschera contenga un 1, quindi una maschera di tutti 1 inverte tutti i bit. Il valore -1 è tutti 1 in binario, ed è per questo che funziona come maschera. RISC-V non ha un'istruzione di inversione dedicata perché questa riscrittura se ne occupa.

not produce l'opposto di una maschera. Se un pattern seleziona certi bit, not produce il pattern che seleziona il resto. Far seguire not da and azzera i bit che la maschera originale indicava, il che disattiva un insieme di flag.

Il manuale RISC-V definisce not come pseudoistruzione dell'assembler per xori con la costante -1, e descrive quel xori come un'inversione logica bit a bit del registro rs1.

not e neg danno risultati diversi. not inverte i bit, e neg inverte il segno. not di 5 è -6, e neg di 5 è -5. La trace del simulatore mostra lo xori che viene eseguito al posto di not.

Si espande in

xori rd, rs, -1

L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.

Esempio

li t0, 0
not t1, t0       # t1 = -1 (every bit flipped)