bgez
pseudolyszt.net aborda bgez e outras instruções RISC-V com mais detalhes.
Descrição
bgez desvia quando o valor em um registrador é zero ou positivo. O nome significa desviar se maior ou igual a zero. A forma abaixo salta para a posição rotulada quando rs é pelo menos zero, e passa para a próxima instrução caso contrário.
bgez rs, label
O montador a trata como uma pseudo-instrução e a reescreve para a instrução abaixo, que compara o registrador com zero, o registrador que sempre contém 0.
bge rs, zero, label
A comparação é com sinal, então os 32 bits no registrador são lidos como um número que pode ser negativo. Zero conta como correspondência, o que separa bgez de bgtz. É o oposto de bltz, então para qualquer valor exatamente um dos dois realiza o desvio. Veja bge para a comparação de dois registradores.
bgez é o teste natural para um valor que não deve ser negativo, como um comprimento, uma contagem ou um índice. Um programa que subtrai um de um contador e continua em loop enquanto o contador não ficou abaixo de zero o usa no final do loop.
addi t0, t0, -1 bgez t0, loop
O loop acima se repete enquanto t0 for 0 ou mais após a subtração, então ele executa mais uma vez com t0 igual a 0 e para quando t0 chega a -1.
Expande para
bge rs, zero, label
O montador substitui esta pseudoinstrução pela instrução ou instruções reais listadas acima.
Exemplo
li t0, 4 bgez t0, done # t0 >= 0, so jump to 'done'
