lipseudo

li

pseudo
Assembly RISC-V Riferimento

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

Descrizione

li carica un numero costante in un registro. Il nome sta per load immediate (carica immediato), e un immediato è un valore fisso scritto direttamente nel codice. La riga successiva memorizza 42 in t0.

li t0, 42

La maggior parte dei programmi inizia inserendo numeri noti nei registri, tra cui contatori, limiti e codici di servizio.

La parola load deriva da un limite hardware. Un'istruzione RISC-V è lunga 32 bit e deve contenere insieme l'operazione, i registri e la costante. Una sola istruzione non può contenere una costante completa a 32 bit. Le costanti piccole ci stanno e quelle grandi no.

li aggira questo limite. È una pseudoistruzione, un nome che l'assembler sostituisce con le istruzioni reali richieste dal valore. Un valore piccolo richiede una istruzione. Un valore grande ne richiede due, una che imposta la parte superiore e una che aggiunge la parte inferiore, così la riga successiva funziona per un numero di qualsiasi dimensione.

li t1, 0x10010000

Il simulatore mostra le istruzioni reali in cui li si espande.

Il manuale RISC-V descrive lui come l'istruzione per costruire costanti a 32 bit. Colloca un valore a 20 bit nei bit superiori del registro di destinazione e riempie i 12 bit più bassi con zeri.

li e la caricano cose diverse. li carica un numero che hai digitato e la carica l'indirizzo che un'etichetta rappresenta. L'esempio carica un valore piccolo e uno grande, e l'assembler li gestisce allo stesso modo.

Si espande in

addi rd, zero, imm          # small constants
lui rd, hi  +  addi rd, rd, lo   # large constants

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

Esempio

li t0, 42
li t1, 0x10010000