bgezpseudo

bgez

pseudo
Ensamblador RISC-V Referencia

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