sub
lyszt.net aborda sub e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
sub subtrai o valor de um registro de outro e grava o resultado em um terceiro. Ele opera com registros, os pequenos compartimentos de armazenamento numerados dentro do processador, cada um contendo um número de 32 bits.
A sintaxe de sub é mostrada abaixo, e o resultado é rd = rs1 - rs2. rd é o registro de destino, para onde o resultado é enviado. rs1 e rs2 são os registros de origem. A ordem é importante, e invertê-la é um erro comum entre iniciantes.
sub rd, rs1, rs2
A próxima linha calcula t0 menos t1. A fonte à esquerda é o valor do qual se subtrai.
sub t2, t0, t1
Não existe uma instrução subi para subtrair uma constante. A instrução addi aceita constantes negativas; portanto, subtrair um número fixo significa somar seu negativo. A próxima linha diminui o valor de t0 em um.
addi t0, t0, -1
O RISC-V possui um registro especial chamado zero que sempre contém o valor 0. Subtrair um número de zero inverte seu sinal; portanto, a próxima linha coloca o negativo de t1 em t0. A instrução neg é uma forma abreviada para isso.
sub t0, zero, t1
O manual do RISC-V define sub como a subtração de rs2 de rs1. O estouro é ignorado e apenas os bits inferiores de XLEN do resultado são gravados em rd, sendo que XLEN é a largura do registro em bits, que neste caso é 32. O manual também lista o registro x0, que este simulador denomina zero, como predefinido com um valor em que todos os bits são 0.
No exemplo, 10 menos 4 resulta em 6 em t2. Trocar as duas fontes resulta em -6, que o processador armazena em seu próprio esquema para números negativos.
Exemplo
li t0, 10 li t1, 4 sub t2, t0, t1 # t2 = 6
Referências
- [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.
