bgezpseudo

bgez

pseudo
Assembly RISC-V Referência

lyszt.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'