blt
lyszt.net aborda blt e outras instruções RISC-V com mais detalhes.
Formato de codificação
Descrição
blt compara dois valores e desvia quando o primeiro é menor. beq e bne testam igualdade em vez disso. O nome significa branch if less than (desviar se menor que). A forma abaixo salta para a posição rotulada quando rs1 é menor que rs2, e segue para a próxima instrução caso contrário.
blt rs1, rs2, label
A página beq explica desvios, rótulos e como um salto funciona.
A comparação trata ambos os valores como com sinal, então eles podem ser negativos. -1 é menor que 0, e qualquer número negativo é menor que qualquer número positivo. Comparações sem sinal usam uma instrução separada, bltu, e as duas discordam em qualquer valor cujo bit mais significativo esteja definido.
Laços de contagem dependem de blt. A linha abaixo se repete enquanto o contador t0 permanecer abaixo de seu limite t1.
blt t0, t1, loop
Quando o contador atinge o limite, o desvio não é tomado e o laço termina. Verificações de limites usam a mesma instrução para manter um valor abaixo de um máximo antes que o programa o utilize.
O manual do RISC-V especifica que blt e bltu tomam o desvio quando rs1 é menor que rs2, comparando com sinal e sem sinal, respectivamente. Ele também observa que bgt, bgtu, ble e bleu podem ser sintetizados invertendo os operandos de blt, bltu, bge e bgeu.
O RISC-V não fornece desvio se maior. Para testar se a é maior que b, inverta a comparação e teste se b é menor que a. O montador oferece um atalho bgt que troca os operandos para você.
Exemplo
li t0, 2 li t1, 5 blt t0, t1, done # 2 < 5, so jump to 'done'
