add
lyszt.net aborda add e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
add soma os valores em dois registradores e armazena o resultado em um terceiro. Um registrador é um pequeno espaço dentro do processador que contém um único número de 32 bits. O RISC-V fornece 32 registradores. Um bit é um 0 ou 1, e 32 bits cobrem números inteiros de 0 até aproximadamente quatro bilhões. A aritmética ocorre entre registradores e nunca toca a memória diretamente.
add tem a forma abaixo, e o resultado é rd = rs1 + rs2. rd é o registrador de destino, onde a resposta vai. rs1 e rs2 são os registradores de origem, e seus valores permanecem os mesmos.
add rd, rs1, rs2
O destino também pode servir como origem. A linha abaixo soma t1 a t0 e coloca o resultado de volta em t0. Totais acumulados em laços usam essa forma.
add t0, t0, t1
Um registrador contém no máximo 32 bits. Quando uma soma excede o maior valor que um registrador pode conter, o resultado volta para um número pequeno, como um relógio de 24 horas que vai de 23:59 de volta para 00:00. Isso é overflow, e o RISC-V não dá nenhum aviso quando isso ocorre.
O manual do RISC-V afirma que nenhuma instrução de computação inteira gera uma exceção aritmética, e que o conjunto de instruções base não faz verificações de overflow porque os desvios cuidam disso a baixo custo. Para a adição sem sinal, um único desvio após o add é suficiente. Nas duas linhas abaixo, o desvio salta para o rótulo overflow quando a soma é menor que um operando, o que só acontece se a soma deu a volta.
add t0, t1, t2 bltu t0, t1, overflow
No exemplo, as duas primeiras linhas usam li (load immediate) para colocar as constantes 3 e 4 em t0 e t1. A linha add então deixa 7 em t2.
Exemplo
li t0, 3 li t1, 4 add t2, t0, t1 # t2 = 7
Referências
- [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.
