neg
pseudolyszt.net tratta neg e altre istruzioni RISC-V in modo più dettagliato.
Descrizione
neg inverte il segno di un numero: 5 diventa -5 e -5 diventa 5. Il nome è l'abbreviazione di negate. La forma seguente inserisce la negazione del registro sorgente rs nel registro di destinazione rd.
neg rd, rs
neg è una pseudoistruzione. Un assembler riscrive una pseudoistruzione, che è un nome leggibile, in una o più istruzioni reali prima che il processore la incontri. neg diventa l'istruzione seguente, che sottrae il numero da zero, il registro speciale che contiene sempre 0.
sub rd, zero, rs
0 meno x è uguale a -x, quindi questo produce la negazione. RISC-V mantiene piccolo il suo insieme di istruzioni reali riutilizzando in questo modo la sottrazione e il registro zero.
L'intervallo dei numeri negativi si estende di un passo oltre l'intervallo positivo. Raggiunge circa -2,1 miliardi e solo circa +2,1 miliardi. Il numero più negativo non ha una controparte positiva, quindi negarlo causa un wraparound e restituisce lo stesso numero. Il codice che calcola i valori assoluti deve tenere conto di questo caso.
Il manuale RISC-V definisce sub come la sottrazione di rs2 da rs1 e descrive il registro x0, chiamato zero qui, come cablato a un valore i cui bit sono tutti 0. Sottrarre un valore da x0 produce il suo negativo, che è la forma che neg assume.
L'esempio nega 5 in -5. Combinato con un salto che salta neg quando il numero è già positivo, produce il solito valore assoluto in due istruzioni.
Si espande in
sub rd, zero, rs
L'assembler sostituisce questa pseudoistruzione con la o le istruzioni reali elencate sopra.
Esempio
li t0, 5 neg t1, t0 # t1 = -5
Riferimenti
- [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.
