add

add

Assembly RISC-V Riferimento

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

Formato di codifica

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

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