addi
lyszt.net tratta addi e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
addi aggiunge una costante a un registro. Il nome sta per add immediate (aggiungi immediato). Un immediato è un valore costante scritto nell'istruzione stessa anziché letto da un registro. Usalo quando uno dei numeri è fisso nel momento in cui scrivi il programma, come aggiungere 1 a un contatore.
La forma di addi è mostrata di seguito. Legge il valore nel registro sorgente rs1, aggiunge la costante imm e scrive il risultato nel registro di destinazione rd.
addi rd, rs1, imm
La riga successiva legge t0, aggiunge uno e riscrive il risultato, quindi t0 = t0 + 1.
addi t0, t0, 1
La costante occupa 12 bit ed è con segno, dando un intervallo da -2048 a 2047. L'assembler rifiuta i valori più grandi. Per una costante più grande, caricala prima in un registro con li. Una costante negativa fa anche sottrarre addi, ed è per questo che RISC-V non ha un'istruzione separata di sottrazione immediata. La riga successiva conta alla rovescia.
addi t0, t0, -1
Il manuale RISC-V chiama la costante un immediato a 12 bit esteso in segno. Afferma che l'overflow aritmetico viene ignorato, quindi il risultato conserva solo i suoi bit XLEN bassi, dove XLEN è la larghezza del registro in bit, qui 32. Quando il segno della costante è noto, un salto dopo l'addizione verifica l'overflow con segno. Le due righe seguenti gestiscono il caso comune di aggiungere una costante positiva.
addi t0, t1, +imm blt t0, t1, overflow
I programmi usano addi per i contatori, per spostare un puntatore all'elemento successivo e per riservare spazio sullo stack. L'esempio aggiunge 1 per avanzare un contatore e aggiunge -16 per riservare 16 byte di memoria di lavoro, che è il modo in cui di solito inizia una funzione che necessita di spazio di lavoro.
Esempio
addi t0, t0, 1 # t0++ addi sp, sp, -16 # reserve 16 bytes of stack
Riferimenti
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4.1, Integer Register-Immediate Instructions, pages 28 to 29.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
