bgez
pseudolyszt.net cubre bgez y otras instrucciones RISC-V con más detalle.
Descripción
bgez salta a una rama cuando el valor de un registro es cero o positivo. El nombre significa branch if greater than or equal to zero (bifurcar si es mayor o igual que cero). La forma siguiente salta a la posición etiquetada cuando rs es al menos cero, y en caso contrario continúa con la siguiente instrucción.
bgez rs, label
El ensamblador la trata como una pseudoinstrucción y la reescribe a la instrucción siguiente, que compara el registro con zero, el registro que siempre contiene 0.
bge rs, zero, label
La comparación es con signo, por lo que los 32 bits del registro se leen como un número que puede ser negativo. El cero cuenta como coincidencia, lo que distingue a bgez de bgtz. Es lo opuesto de bltz, así que para cualquier valor exactamente una de las dos toma la rama. Véase bge para la comparación de dos registros.
bgez es la prueba natural para un valor que no debe ser negativo, como una longitud, un recuento o un índice. Un programa que resta uno a un contador y sigue iterando mientras el contador no haya bajado de cero la usa al final del bucle.
addi t0, t0, -1 bgez t0, loop
El bucle anterior se repite mientras t0 sea 0 o más después de la resta, por lo que se ejecuta una vez más con t0 igual a 0 y se detiene cuando t0 llega a -1.
Se expande a
bge rs, zero, label
El ensamblador reemplaza esta pseudoinstrucción con la instrucción o instrucciones reales enumeradas arriba.
Ejemplo
li t0, 4 bgez t0, done # t0 >= 0, so jump to 'done'
