slt
lyszt.net aborda slt e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
slt compara dois números e armazena o resultado como 1 ou 0. O nome significa set less than (definir menor que). A forma abaixo testa se rs1 é menor que rs2. Se o teste for bem-sucedido, a instrução escreve 1 no registrador de destino rd. Se falhar, escreve 0.
slt rd, rs1, rs2
Uma comparação pode ser usada de duas maneiras. Uma instrução de desvio salta com base nela. Alternativamente, a resposta sim ou não pode ser armazenada como um número, 1 para verdadeiro e 0 para falso, e usada depois. slt faz o armazenamento. O assembly representa verdadeiro e falso com o 1 ou 0 armazenado, e esse valor pode ser somado, mascarado ou combinado como qualquer outro número.
A comparação trata os valores como com sinal, então eles podem ser negativos, e -1 conta como menor que 0. A instrução relacionada sltu os trata como sem sinal, o que muda a resposta para valores grandes e para valores que parecem negativos.
O manual do RISC-V descreve slt e sltu como as comparações com e sem sinal que escrevem 1 em rd se rs1 for menor que rs2 e 0 caso contrário. Ele também usa slt em uma verificação de overflow para adição com sinal geral. Após a adição, a segunda linha abaixo registra se o segundo operando é negativo, a terceira linha registra se a soma é menor que o primeiro operando, e a última linha salta quando as duas respostas diferem.
add t0, t1, t2 slti t3, t2, 0 slt t4, t0, t1 bne t3, t4, overflow
O raciocínio é que a soma deve ser menor que um operando apenas quando o outro operando é negativo.
Não existe instrução set greater than (definir maior que). Para testar se a é maior que b, troque os operandos e pergunte se b é menor que a. O exemplo compara 3 e 9. Como 3 é menor que 9, t2 é definido como 1.
Exemplo
li t0, 3 li t1, 9 slt t2, t0, t1 # t2 = 1
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.4, Integer Computational Instructions, page 27.
