addi
lyszt.net aborda addi e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
addi adiciona uma constante a um registrador. O nome significa add immediate (adicionar imediato). Um imediato é um valor constante escrito na própria instrução em vez de lido de um registrador. Use-o quando um dos números é fixo no momento em que você escreve o programa, como adicionar 1 a um contador.
A forma de addi é mostrada abaixo. Ela lê o valor no registrador de origem rs1, adiciona a constante imm e escreve o resultado no registrador de destino rd.
addi rd, rs1, imm
A linha seguinte lê t0, adiciona um e escreve o resultado de volta, então t0 = t0 + 1.
addi t0, t0, 1
A constante ocupa 12 bits e é com sinal, dando um intervalo de -2048 a 2047. O montador rejeita valores maiores. Para uma constante maior, carregue-a em um registrador com li primeiro. Uma constante negativa faz addi subtrair também, e é por isso que o RISC-V não tem uma instrução separada de subtração imediata. A linha seguinte faz a contagem regressiva.
addi t0, t0, -1
O manual do RISC-V chama a constante de imediato de 12 bits com extensão de sinal. Ele afirma que o estouro aritmético é ignorado, então o resultado mantém apenas seus bits XLEN de ordem inferior, onde XLEN é a largura do registrador em bits, 32 aqui. Quando o sinal da constante é conhecido, um desvio após a adição verifica estouro com sinal. As duas linhas abaixo tratam o caso comum de adicionar uma constante positiva.
addi t0, t1, +imm blt t0, t1, overflow
Os programas usam addi para contadores, para mover um ponteiro para o próximo item e para reservar espaço na pilha. O exemplo adiciona 1 para avançar um contador e adiciona -16 para reservar 16 bytes de memória de trabalho, que é como uma função que precisa de espaço de trabalho geralmente começa.
Exemplo
addi t0, t0, 1 # t0++ addi sp, sp, -16 # reserve 16 bytes of stack
Referências
- [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.
