notpseudo

not

pseudo
Ensamblador RISC-V Referencia

lyszt.net cubre not y otras instrucciones RISC-V con más detalle.

Descripción

not invierte todos los bits de un registro. Un 0 se convierte en 1, y un 1 se convierte en 0. La forma a continuación lee el registro fuente rs, invierte los 32 bits y escribe el resultado en el registro destino rd. Esta operación es el complemento a nivel de bits.

not rd, rs

not es una pseudoinstrucción: un nombre legible que el ensamblador reescribe como una instrucción real. Se convierte en la instrucción a continuación, que es XOR con una máscara de todos 1s.

xori rd, rs, -1

XOR invierte un bit donde la máscara tiene un 1, así que una máscara de todos 1s invierte todos los bits. El valor -1 es todos 1s en bits, por eso funciona como máscara. RISC-V no tiene una instrucción de inversión dedicada porque esta reescritura se encarga de ello.

not produce lo opuesto de una máscara. Si un patrón selecciona ciertos bits, not produce el patrón que selecciona el resto. Seguir not con and borra los bits que el patrón original nombraba, lo que apaga un conjunto de flags.

El manual de RISC-V define not como una pseudoinstrucción del ensamblador para xori con la constante -1, y describe ese xori como una inversión lógica a nivel de bits del registro rs1.

not y neg dan resultados diferentes. not invierte bits, y neg invierte el signo. not de 5 es -6, y neg de 5 es -5. La traza del simulador muestra el xori que se ejecuta en lugar de not.

Se expande a

xori rd, rs, -1

El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.

Ejemplo

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