slti

slti

Assembly RISC-V Referência

lyszt.net aborda slti e outras instruções RISC-V com mais detalhes.

Formato de codificação

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Descrição

slti compara um registrador com uma constante e escreve 1 ou 0 no destino. É slt, que compara dois registradores e armazena o resultado como um número (veja essa página), com o segundo valor fornecido como imediato. Um imediato é uma constante codificada na instrução, e o i no nome o marca.

A forma de slti é mostrada abaixo. Quando o valor em rs1 é menor que a constante imm, rd recebe 1, e 0 caso contrário.

slti rd, rs1, imm

A comparação é com sinal, então o registrador e a constante são ambos lidos como números que podem ser negativos.

Use-o para comparar uma variável com um limite fixo conhecido antecipadamente. Verificar se um índice está abaixo de 10 ou se um valor caiu abaixo de um limite leva um único slti. A próxima linha pergunta se t0 é menor que zero, o que testa um valor negativo e define t1 como 1 para valores negativos e 0 caso contrário.

slti t1, t0, 0

O manual do RISC-V diz que slti coloca 1 em rd se rs1 for menor que o imediato estendido em sinal quando ambos são tratados como números com sinal, e 0 caso contrário. A verificação de overflow para adição com sinal geral o utiliza, como mostrado na página slt, para registrar se um operando é negativo.

A constante varia de -2048 a 2047. Para comparar com um valor maior, carregue a constante em um registrador com li e use slt. O montador rejeita uma constante fora do intervalo com uma mensagem de erro.

Exemplo

li t0, 3
slti t1, t0, 5   # t1 = 1 (3 < 5)