negpseudo

neg

pseudo
Assembly RISC-V Riferimento

lyszt.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