neg
pseudolyszt.net cubre neg y otras instrucciones RISC-V con más detalle.
Descripción
neg invierte el signo de un número: 5 se convierte en -5, y -5 se convierte en 5. El nombre es la forma abreviada de negate. La forma a continuación coloca la negación del registro fuente rs en el registro destino rd.
neg rd, rs
neg es una pseudoinstrucción. Un ensamblador reescribe una pseudoinstrucción, que es un nombre legible, en una o más instrucciones reales antes de que el procesador se encuentre con ella. neg se convierte en la instrucción a continuación, que resta el número de zero, el registro especial que siempre contiene 0.
sub rd, zero, rs
0 menos x es igual a -x, por lo que esto produce la negación. RISC-V mantiene pequeño su conjunto de instrucciones reales reutilizando la resta y el registro cero de esta manera.
El rango de números negativos se extiende un paso más allá del rango positivo. Alcanza aproximadamente -2.1 mil millones y solo aproximadamente +2.1 mil millones. El número más negativo no tiene contraparte positiva, por lo que negarlo da la vuelta y produce el mismo número. El código que calcula valores absolutos debe tener en cuenta este caso.
El manual de RISC-V define sub como la resta de rs2 de rs1 y describe el registro x0, llamado zero aquí, como cableado de forma fija a un valor cuyos bits son todos 0. Restar un valor de x0 produce su negativo, que es la forma en que se convierte neg.
El ejemplo niega 5 en -5. Combinado con una bifurcación que omite neg cuando el número ya es positivo, produce el habitual valor absoluto de dos instrucciones.
Se expande a
sub rd, zero, rs
El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.
Ejemplo
li t0, 5 neg t1, t0 # t1 = -5
Referencias
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.2, Integer Register-Register Instructions, page 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
