add
lyszt.net tratta add e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
add somma i valori in due registri e memorizza il risultato in un terzo. Un registro è un piccolo spazio all'interno del processore che contiene un singolo numero a 32 bit. RISC-V fornisce 32 registri. Un bit è uno 0 o un 1, e 32 bit coprono i numeri interi da 0 fino a circa quattro miliardi. L'aritmetica avviene tra registri e non tocca mai direttamente la memoria.
add ha la forma seguente, e il risultato è rd = rs1 + rs2. rd è il registro di destinazione, dove va la risposta. rs1 e rs2 sono i registri sorgente, e i loro valori restano invariati.
add rd, rs1, rs2
La destinazione può servire anche come sorgente. La riga seguente somma t1 a t0 e rimette il risultato in t0. I totali progressivi nei cicli usano questa forma.
add t0, t0, t1
Un registro contiene al massimo 32 bit. Quando una somma supera il valore più grande che un registro può contenere, il risultato torna a un numero piccolo, come un orologio a 24 ore che passa da 23:59 di nuovo a 00:00. Questo è un overflow, e RISC-V non dà alcun avviso quando si verifica.
Il manuale RISC-V afferma che nessuna istruzione di calcolo intero solleva un'eccezione aritmetica, e che il set di istruzioni di base non esegue controlli di overflow perché i salti se ne occupano a basso costo. Per l'addizione senza segno, un solo salto dopo l'add è sufficiente. Nelle due righe seguenti, il salto va all'etichetta overflow quando la somma è minore di un operando, cosa che accade solo se la somma ha fatto il giro.
add t0, t1, t2 bltu t0, t1, overflow
Nell'esempio, le prime due righe usano li (load immediate) per mettere le costanti 3 e 4 in t0 e t1. La riga add lascia poi 7 in t2.
Esempio
li t0, 3 li t1, 4 add t2, t0, t1 # t2 = 7
Riferimenti
- [1]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
- [2]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.
