sub
lyszt.net tratta sub e altre istruzioni RISC-V in modo più dettagliato.
Formato di codifica
Descrizione
sub sottrae il valore contenuto in un registro da quello contenuto in un altro e scrive il risultato in un terzo registro. Opera sui registri, ovvero le piccole aree di memoria numerate all’interno del processore, ciascuna delle quali contiene un numero a 32 bit.
La sintassi di sub è mostrata di seguito e il risultato è rd = rs1 - rs2. rd è il registro di destinazione, dove viene salvato il risultato. rs1 e rs2 sono i registri sorgente. L’ordine è importante e invertirlo è un errore comune tra i principianti.
sub rd, rs1, rs2
La riga successiva calcola t0 meno t1. La sorgente a sinistra è il valore da cui viene sottratto.
sub t2, t0, t1
Non esiste un'istruzione subi per sottrarre una costante. L'istruzione addi accetta costanti negative, quindi sottrarre un numero fisso significa sommare il suo opposto. La riga successiva riduce il valore di t0 di uno.
addi t0, t0, -1
RISC-V dispone di un registro speciale denominato zero che contiene sempre il valore 0. Sottraendo un numero da zero se ne inverte il segno, quindi la riga successiva assegna il valore negativo di t1 a t0. L’istruzione neg è una scorciatoia per questa operazione.
sub t0, zero, t1
Il manuale di RISC-V definisce sub come la sottrazione di rs2 da rs1. L’overflow viene ignorato e solo i bit meno significativi (XLEN) del risultato vengono scritti in rd, dove XLEN è la larghezza del registro in bit, che in questo caso è 32. Il manuale indica inoltre che il registro x0, denominato zero in questo simulatore, è preimpostato su un valore con tutti i bit a 0.
Nell’esempio, 10 meno 4 dà come risultato 6 in t2. Scambiando le due sorgenti si ottiene -6, che il processore memorizza secondo il proprio schema per i numeri negativi.
Esempio
li t0, 10 li t1, 4 sub t2, t0, t1 # t2 = 6
Riferimenti
- [1]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.
- [2]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.1, Programmers' Model for Base Integer ISA, page 23.
- [3]RISC-V International. The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture. Version 20260120. Section 2.4, Integer Computational Instructions, page 27.
